sqyog
#DDL数据库操作
/*
创建数据库
create database if not exists 库名;
创建数据库指定字符集
create database 数据库名 character set 字符集;
创建数据库并且指定排序方式
create database 数据库名 collate 排序方式;
创建数据库并且指定字符集和排序方式
create database 数据库名 character set 字符集 collate 排序方式;
查询数据库字符集和排序方式
show variables like 'character_set_database';
show variables like 'collation_database';
*/
CREATE DATABASE IF NOT EXISTS lianxi_db1 CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs;
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';
/*
1.2数据库查看
查看所有库
show databases;
查看当前使用库
select database();
查看库下所有表
show tables from 库名;
查看创建库信息和语句
show create database 库名;
选中切换库
use 库名;
细节:对数据操作之前一定要选中库
*/
SHOW DATABASES;
USE lianxi_db1;
SELECT DATABASE();
SHOW TABLES FROM mysql;
SHOW CREATE DATABASE mysql;
/*
1.3修改库
修改字符集
alter database 库名 character set 字符集;
修改排序方式
alter database 库名 collate 排序方式;
修改字符集和排序方式
alter database 库名 character set 字符集 collate 排序方式;
注意:数据库没有修改名字指令,要备份数据,删除旧库,创建新库,恢复数据
*/
ALTER DATABASE lianxi_db1 CHARACTER SET utf8;
ALTER DATABASE lianxi_db1 COLLATE utf8mb4_0900_as_cs;
ALTER DATABASE lianxi_db1 CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs;
/*
1.4删除数据库
直接删除
drop database 库名;
判断存在删除
drop database if exists 库名;
*/
/*
1.5 库管理练习
1.创建一个名为blog_platform的数据库
2.查看数据库字符集和排序方式
3.将排序方式改为utf8mb4_0900_as_cs,以实现大小写敏感
4.查看数据库字符集和排序方式
5.删除库跑路
*/
CREATE DATABASE IF NOT EXISTS blog_platform;
USE blog_platform;
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';
ALTER DATABASE blog_platform COLLATE utf8mb4_0900_as_cs;
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';
DROP DATABASE blog_platform;
SHOW DATABASES;
#2.DDL之数据表操作
/*
创建表语法
create table [if not exists] 表名(
列名 类型 [列的约束条件] [列的注释],
列名 类型 [列的约束条件] [列的注释],
.....
列名 类型 [列的约束条件] [列的注释]
)[描述] [注释];
建表事项
1.表名 列名 列类型必须填写
2.推荐使用if not exists
3.注释很有必要
4.列之间使用,隔开,最后一列没有,
*/
/*
2.2 建表实战
1.创建名为book_libs的库,并且使用utf8mb4,utf8mb4_0900_as_cs
2.创建一个图书表books
图书名称book_name列,类型varchar(20),添加注释
图书价格book_price列,类型为double(4,1),添加注释
图书数量book_num列,类型为int,添加注释
*/
CREATE DATABASE IF NOT EXISTS book_libs CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs;
USE book_libs;
SELECT DATABASE();
CREATE TABLE IF NOT EXISTS books(
book_name VARCHAR(20) COMMENT '图书名字',
book_price DOUBLE(4,1) COMMENT '价格',
book_num INT COMMENT '数量'
)CHARSET = utf8mb4 COMMENT '图书表';
SHOW TABLES FROM book_libs;
/*
2.3创建表的类型(整数)
tinyint
smallint
mediumint
int
bigint
无符号要用unsigned修饰,没有负值
*/
#练习
#创建一个t1表,包含年龄,学号
USE lianxi_db1;
SELECT DATABASE();
CREATE TABLE IF NOT EXISTS t1(
t1_age TINYINT UNSIGNED COMMENT '年龄无负值',
t1_id INT UNSIGNED COMMENT '学号无负值'
);
SHOW TABLES FROM lianxi_db1;
/*
2.4创建表的类型(小数)
float(m,d) m:小数加整数位数(最大为24);d:小数位数(最大为8);
double(m,d) m:最大为53,d:最大为30;
decimal(m,d) m:最大为65,d:最大为30; (不会精度丢失)
无符号要用unsigned修饰,没有负值
*/
/*
2.5创建表的类型(字符串)
char(m) 固定长度 m:最大为255;如果不指定m默认为1;
varchar(m) 可变长度 m:最大为65535/4;必须指定m;
text 大文本类型,不用指明长度;
细节:
char中小于m会用空格补全,读取的时候忽略空格;
varchar会读取空格;
*/
/*
2.6创建表的类型(时间)
year
time
date
datetime
timestamp
演示:创建t2表,
注册日期 字段插入自动添加时间,更新数据时间不变(自动维护时间,后续修改数据时间不变)
更新日期 字段插入自动添加时间,更新数据时间改变(插入数据自动维护时间,修改数据时间改变)
*/
USE lianxi_db1;
CREATE TABLE t2(
NAME VARCHAR(20),
register_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '插入自动维护时间',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '插入维护时间,修改数据自动更新时间'
);
SHOW TABLES FROM lianxi_db1;
/*
练习:
创建学生表student存储借书学员信息,包括姓名,年龄,身高,生日以及注册时间和更新时间;
*/
CREATE TABLE student(
student_name VARCHAR(20) COMMENT '姓名',
student_age TINYINT UNSIGNED COMMENT '年龄',
student_high DOUBLE(4,1) UNSIGNED COMMENT '身高',
student_born DATE COMMENT '生日',
student_register DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
student_update DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
);
SHOW TABLES FROM lianxi_db1;
/*
2.7修改表
添加列
alter table 表名 add 列名 类型 [first | after 原列名]
修改列名
alter table 表名 change 原列名 新列名 新类型 [first | after 原列名]
修改列类型
alter table 表名 modify 列名 新类型 [first | after 原列名]
删除列
alter table 表名 drop 列名;
修改表名
alter table 表名 rename [to] 新表名;
删除表
drop table [if exists] 表名;
清空表数据
truncate table 表名; #删除表中数据+删除表的关联记录
*/
/*
练习:
1.创建表employees
2.将表中的mobile字段修改到code字段后面
3.将birth字段改为birthday
4.修改sex字段,数据类型char(1)
5.删除字段note
6.增加字段favoriate_activity,数据类型varchar(100)
7.将表名称改为employee_info
*/
CREATE TABLE employees(
emp_num INT(11),
last_name VARCHAR(50),
first_name VARCHAR(50),
mobile VARCHAR(25),
`code` INT,
job_title VARCHAR(50),
birth DATE,
note VARCHAR(255),
sex VARCHAR(5)
);
SHOW TABLES FROM lianxi_db1;
DESC employees;
ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER `code`;#2
ALTER TABLE employees CHANGE birth birthday DATE;#3
ALTER TABLE employees MODIFY sex CHAR; #4
ALTER TABLE employees DROP note;#5
ALTER TABLE employees ADD favoriate_activity VARCHAR(100);#6
ALTER TABLE employees RENAME TO employee_info;#7
DESC employee_info;
#3 DML数据操作语言
/*
3.1插入数据
1.全列插入
insert into 表名 values(值1,值2....);
2.指定列插入
insert into 表名 (列名1,列名2..) values(值1,值2....);
3.多行插入
insert into 表名 values(值1,值2....),(值1,值2....)....; #一个括号代表一行
insert into 表名 (列名1,列名2..) values(值1,值2....),(值1,值2....)....;
*/
/*
练习
1.插入一名学生的全部信息
2.插入一名学生的学号,名字,年龄,其他默认
3.插入两名学生的信息,包括学号,名字,年龄,生日和身高
4.插入一名学生大的信息,只包括学号,名字,年龄,其他为空
*/
CREATE DATABASE IF NOT EXISTS dml_db1;
USE dml_db1;
CREATE TABLE students(
stu_id INT COMMENT '学号',
stu_name VARCHAR(100) COMMENT '姓名',
stu_age TINYINT UNSIGNED COMMENT '年龄',
stu_birthday DATE COMMENT '生日',
stu_height DECIMAL(4,1) DEFAULT 200 COMMENT'身高'
);
INSERT INTO students VALUES (1, 'haha' , 18 , '2007-02-15' , 163);
INSERT INTO students (stu_id,stu_name,stu_age) VALUES (2,'xiangxiang',18);
INSERT INTO students VALUES (3,'haha',18,'2007-02-15',163),(4,'haha',18,'2007-02-15',163);
INSERT INTO students (stu_id,stu_name,stu_age,stu_birthday,stu_height) VALUES (5,'xiangxiang',18,NULL,NULL),(6,'xiangxiang',18,NULL,NULL);
DESC students;
/*
3.2修改数据
全表修改
update 表名 set 列名 = 新值 , 列名 = 值 , 列名 = 值...
条件修改(条件筛选行)
update 表名 set 列名 = 新值 , 列名 = 值 , 列名 = 值... where 条件
*/
/*
练习:
1.把学号为3的名字改为'xixi'
2.将年龄小于20的身高加上2
3.将所有人年龄降1
*/
UPDATE students SET stu_name = 'xixi' WHERE stu_id = 3;
UPDATE students SET stu_height = stu_height + 3 WHERE stu_age <= 20;
UPDATE students SET stu_age = stu_age - 1;
/*
3.3删除数据
全表删除
delete from 表名;
条件删除
delete from 表名 where 条件;
*/
/*
练习
1.删除身高为203的
2.将身高为166的且年龄小于20的数据移除
3.将所有学生全部移除
*/
DELETE FROM students WHERE stu_height = 203;
DELETE FROM students WHERE stu_height = 166 AND stu_age <20;#或是or
DELETE FROM students;
#4.DQL数据查询语句
/*
4.1基本语法
1.非表查询
select关键字,快速输出一个运算结果或函数
2.指定表查询
查询结果来自一张表或多张表
select 列名,列名,... from 表名
select 表名.列名,列名,... from 表名 #表名.列名 多表的时候要这么用,多表列名可能重复
select * , 表名.* | from 表名; * 就是所有列
3.查询列并起别名
select 列名 as 别名 , 列名 别名 ... from 表;
4.去除重复行数据
select distinct 列名 , 列名 , 列名 from 表名;
5.查询常数列
select 列 , 列名 , '值' as 列名 from 表;
*/
SELECT NOW();#1 #查询当前时间
SELECT * FROM students;#2 #查询全部信息
SELECT stu_id,stu_name FROM students;#2 #查询学号和姓名
SELECT stu_name AS NAME , stu_age FROM students;#3 #查询名字和年龄,将名字显示为name而不是stu_name
SELECT DISTINCT stu_name , stu_age FROM students;#4 查询名字年龄并且去重
SELECT stu_name , stu_age , 'zjnu' university FROM students; #5 #查询名字年龄并且添加常数列学校'zjnu';
/*
4.2显示表结构
使用命令查看表的列和列的特征
describe 表名;
desc 表名;
*/
DESC students;
/*
4.3 条件查询
select 列 from 表 where 条件 [and][or] [条件];
*/
SELECT DISTINCT stu_id,stu_name FROM students WHERE stu_id = 3;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Hexo!