库的定义
--- 创建数据库
CREATE DATABASE zabbix CHARSET utf8mb4 COLLATE utf8mb4_bin;
--- 查看库情况
SHOW DATABASES;SHOW CREATE DATABASE zabbix;
--- 删除数据库(不代表生产操作)
DROP DATABASE zabbix;
--- 修改数据库字符集
--- 注意: 一定是从小往大了改,比如utf8--->utf8mb4.
--- 目标字符集一定是源字符集的严格超集.
CREATE DATABASE zabbix;SHOW CREATE DATABASE zabbix;ALTER DATABASE zabbix CHARSET utf8mb4;
关于库定义规范
--- 1.库名使用小写字符
--- 2.库名不能以数字开头
--- 3.不能是数据库内部的关键字
--- 4.必须设置字符集.
DDL-表定义
--- 建表
表名,列名,列属性,表属性
--- 列属性
PRIMARY KEY : 主键约束,表中只能有一个,非空且唯一.NOT NULL : 非空约束,不允许空值UNIQUE KEY : 唯一键约束,不允许重复值DEFAULT : 一般配合 NOT NULL 一起使用.UNSIGNED : 无符号,一般是配合数字列,非负数COMMENT : 注释AUTO_INCREMENT : 自增长的列
CREATE TABLE stu (id INT PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '学号',sname VARCHAR(255) NOT NULL COMMENT '姓名',age TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',gender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',intime DATETIME NOT NULL DEFAULT NOW() COMMENT '入学时间')ENGINE INNODB CHARSET utf8mb4;
建表规范
--- 1. 表名小写字母,不能数字开头,--- 2. 不能是保留字符,使用和业务有关的表名--- 3. 选择合适的数据类型及长度--- 4. 每个列设置 NOT NULL + DEFAULT .对于数据0填充,对于字符使用有效字符串填充--- 5. 每个列设置注释--- 6. 表必须设置存储引擎和字符集--- 7. 主键列尽量是无关列数字列,最好是自增长--- 8. enum类型不要保存数字,只能是字符串类型
--- 查询建表信息
SHOW TABLES;SHOW CREATE TABLE stu;DESC stu;
--- 创建一个表结构一样的表
CREATE TABLE test LIKE stu;
--- 删表(不代表生产操作)
DROP TABLE test;
--- 修改
--- 在stu表中添加qq列 *****
DESC stu;ALTER TABLE stu ADD qq VARCHAR(20) NOT NULL COMMENT 'qq号';pt-osc
--- 在sname后列 ***
ALTER TABLE stu ADD wechat VARCHAR(64) NOT NULL UNIQUE COMMENT '微信号' AFTER sname;
--- 在id列前加一个新列num ***
ALTER TABLE stu ADD num INT NOT NULL UNIQUE COMMENT '身份证' FIRST ;DESC stu;
--- 把刚才添加的列都删掉(危险,不代表生产操作) ***
ALTER TABLE stu DROP num;DESC stu;ALTER TABLE stu DROP qq;ALTER TABLE stu DROP wechat;
--- 修改sname数据类型的属性 ***
DESC stu;ALTER TABLE stu MODIFY sname VARCHAR(64) NOT NULL COMMENT '姓名';
--- 将gender 改为 sex 数据类型改为 CHAR 类型 ***
ALTER TABLE stu CHANGE gender sex CHAR(4) NOT NULL COMMENT '性别';
DCL
grantrevoke
DML
insertDESC stu;
--- 最偷懒
INSERT stu VALUES(1,'zs',18,'m',NOW());SELECT * FROM stu;
--- 最规范
INSERT INTO stu(id,sname,age,sex,intime)VALUES (2,'ls',19,'f',NOW());
--- 针对性的录入数据
INSERT INTO stu(sname,age,sex)VALUES ('w5',11,'m');
--- 一次性录入多行
INSERT INTO stu(sname,age,sex)VALUES('aa',11,'m'),('bb',12,'f'),('cc',13,'m');
-- update(一定要加where条件)
UPDATE stu SET sname='aaa';SELECT * FROM stu;UPDATE stu SET sname='bb' WHERE id=6;
-- delete (一定要有where条件)
DELETE FROM stu;DELETE FROM stu WHERE id=9;
-- 生产中屏蔽delete功能
--- 使用update替代delete
ALTER TABLE stu ADD is_del TINYINT DEFAULT 0 ;UPDATE stu SET is_del=1 WHERE id=7;SELECT * FROM stu WHERE is_del=0;
删除语句的区别:
delete from table... :逻辑上,逐行删除,数据行多,操作很慢。并没有真正从磁盘上删除,只是在存储层面打标记,磁盘空间不立即释放。HWM高水位线不会降低drop table ... :将表结构(元数据)和数据行物理层次删除truncate table student :清空表段中的所有数据页。物理层次删除全表数据,磁盘空间立即释放,HWM高水位线会降低
文章转载自VFrog,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




