MySQL-05-DDL/DCL/DML语句




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;

posted @ 2021-06-21 16:03  李成果  阅读(125)  评论(0编辑  收藏  举报