DDL数据定义语言
库定义
1 创建数据库
mysql> create database school;
mysql> create schema sch;
mysql> show charset;
mysql> show collation;
mysql> CREATE DATABASE test CHARSET utf8;
mysql> create database xyz charset utf8mb4 collate utf8mb4_bin;
建库规范
1.库名不能有大写字母
2.建库要加字符集
3.库名不能有数字开头
4.库名要和业务相关
建库标准语句
mysql> create database xuexiao charset utf8mb4;
mysql> show create database xuexiao;
2 删库和提桶跑路
mysql> drop database xuexiao;
3 修改
mysql> SHOW CREATE DATABASE school;
mysql> ALTER DATABASE school CHARSET utf8;
注意:修改字符集,修改后的字符集一定是原字符集的严格超集
4 查询库相关信息(DQL)
mysql> show databases;
mysql> show create database xuexiao;
表定义
1 创建
create table stu(
列1 属性(数据类型、约束、其他属性),
列2 属性,
列3 属性
)
2 建表
mysql> USE school;
CREATE TABLE stu(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT ‘学号‘,
sname VARCHAR(255) NOT NULL COMMENT ‘姓名‘,
sage TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT ‘年龄‘,
sgender ENUM(‘m‘,‘f‘,‘n‘) NOT NULL DEFAULT ‘n‘ COMMENT ‘性别‘ ,
sfz CHAR(18) NOT NULL UNIQUE COMMENT ‘身份证‘,
intime TIMESTAMP NOT NULL DEFAULT NOW() COMMENT ‘入学时间‘
) ENGINE=INNODB CHARSET=utf8 COMMENT ‘学生表‘;
建表规范:
1. 表名小写
2. 不能是数字开头
3. 注意字符集和存储引擎
4. 表名和业务有关
5. 选择合适的数据类型
6. 每个列都要有注释
7. 每个列设置为非空,无法保证非空,用0来填充
3 删表
mysql> drop table t1;
4 修改
在stu表中添加qq列
mysql> ALTER TABLE stu ADD qq VARCHAR(20) NOT NULL UNIQUE COMMENT ‘qq号‘;
在sname后加微信列
ALTER TABLE stu ADD wechat VARCHAR(64) NOT NULL UNIQUE COMMENT ‘微信号‘ AFTER sname;
在id列前加一个新列num
ALTER TABLE stu ADD num INT NOT NULL COMMENT ‘数字‘ FIRST;
把刚才添加的列都删掉
ALTER TABLE stu DROP num;
ALTER TABLE stu DROP qq;
ALTER TABLE stu DROP wechat;
修改sname数据类型的属性
ALTER TABLE stu MODIFY sname VARCHAR(128) NOT NULL;
将sgender 改为 sg 数据类型改为 CHAR 类型
ALTER TABLE stu CHANGE sgender sg CHAR(1) NOT NULL DEFAULT ‘n‘;
DESC stu;
5 表属性查询
mysql> use school;
mysql> show tables;
mysql> desc stu;
mysql> show create table stu;
mysql> CREATE TABLE ceshi LIKE stu;
DCL数据控制语言
grant # 授权
revoke # 取消授权
DML数据操作语言
insert
--- 最标准的insert语句
INSERT INTO stu(id,sname,sage,sg,sfz,intime)
VALUES
(1,‘zs‘,18,‘m‘,‘123456‘,NOW());
--- 省事的写法
INSERT INTO stu
VALUES
(2,‘ls‘,18,‘m‘,‘1234567‘,NOW());
--- 针对性的录入数据
INSERT INTO stu(sname,sfz)
VALUES (‘w5‘,‘34445788‘);
--- 同时录入多行数据
INSERT INTO stu(sname,sfz)
VALUES
(‘w55‘,‘3444578d8‘),
(‘m6‘,‘1212313‘),
(‘aa‘,‘123213123123‘);
update
DESC stu;
SELECT * FROM stu;
UPDATE stu SET sname=‘zhao4‘ WHERE id=2;
#### 注意:update语句必须要加where ####
delete
删除id=3的这条数据
DELETE FROM stu WHERE id=3;
全表删除:
DELETE FROM stu
truncate table stu;
区别:
delete: DML操作, 是逻辑性质删除,逐行进行删除,速度慢.
truncate: DDL操作,对与表段中的数据页进行清空,速度快.
伪删除:用update来替代delete,最终保证业务中查不到(select)即可
1.添加状态列
ALTER TABLE stu ADD state TINYINT NOT NULL DEFAULT 1 ;
2. UPDATE 替代 DELETE
UPDATE stu SET state=0 WHERE id=6;
3. 业务语句查询
SELECT * FROM stu WHERE state=1;
MySQL-05-DDL/DCL/DML语句