Mysql基础(三)
#DML语言 /* 数据操作语言 插入:insert insert into 表名(列名,...) values(值1,...); insert into 表名 set 列名=值, 列名=值,... 修改:update 删除:delete */ CREATE TABLE beauty( id INT(11) PRIMARY KEY, `name` VARCHAR(50), sex CHAR(1), borndate DATETIME, phone VARCHAR(11), photo BLOB, boyfriend_id INT(11) ); ##插入方式一: SELECT * FROM beauty; -- 1.插入值的类型要与列的类型一直或兼容 -- 2.不可以为null的列必须插入值,可以为null的类如何插入值 -- 方式1 INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id) VALUE(13,'何苗','女','1995-2-4','13466561321',NULL,2); -- 方式2 INSERT INTO beauty(id,NAME,sex,borndate,phone,boyfriend_id) VALUE(15,'雨洁','女','1996-6-4','13436561651',2); -- 3.列数和值的个数一致且对应 -- 可以省略。默认所有列,而且列的顺序和表中列的顺序一致 INSERT INTO beauty VALUES(16,'芳芳','女',NULL,'23345469858',NULL,NULL); ##插入方式二: -- INSERT INTO beauty SET id = 19, NAME = '琳琳',phone = '999'; SELECT *FROM beauty; -- 两种方式pk -- 方式一支持批量插入多行,方式二不支持 INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id) VALUE(22,'何苗','女','1995-2-4','13466561321',NULL,2), (20,'何苗','女','1995-2-4','13466561321',NULL,2), (21,'何苗','女','1995-2-4','13466561321',NULL,2); -- 方式一支持子查询,方式二不支持 INSERT INTO beauty(id,NAME,phone) SELECT 26,'colin','2332432534';
##修改语句 /* 1.修改单表的记录 语法: update 表名 set列=新值, 列=新值, ... where 筛选条件 2.修改多表的记录 语法: sql192语法: update 表1 别名, 表2 别名 set 列=值, ... where 连接条件 and 筛选条件; sql199语法: update 表1,别名 inner|left|right join 表2 别名 on 连接条件 set 列=值, ... where 筛选条件; */ -- 修改beayty表中姓 琳 的电话号码为888 UPDATE beauty SET phone = '888' WHERE `name` LIKE '琳琳'; ##删除语句 /* 方式一:delete 1.单表的删除 delete from 表名 where 筛选条件 2.多表的删除 sql192 delete 表1的别名,表2的别名 from表1 别名, 表2 别名 where 连接条件 and 筛选条件; sql199 delete 表1的别名 ,表2的表名 from 表1,别名 inner|left|right join 表2 别名 on 连接条件 、 where 筛选条件; 方式二: truncate 语法:truncate table 表名; truncate和delete区别:①假如要删除的表中有自增长列,如果用delete删除后,再插入数据,自增长列的值从断点开始, 而truncate删除后,再插入数据,自增长的值从1开始。 ②truncate删除没有返回值,delete删除有返回值 ③truncate删除不能回滚,delete删除可以回滚 */ -- 删除手机号4结尾的信息 DELETE FROM beauty WHERE phone LIKE '%4'; ##truncate 清空数据 TRUNCATE TABLE beauty;
#DDL /* 数据定义语言 库和表的管理 1.库的管理: 创建,修改,删除 2.表的修改 创建,修改,删除 创建: create 修改: alter 删除: drop */ ##库的管理 -- 1.创建库 CREATE DATABASE IF NOT EXISTS 库民; -- 2.库名的修改,直接找文件修改,一般库不做修改, -- 更改库的字符集 ALTER DATABASE 库名 CHARACTER SET gbk; -- 库的删除 DROP DATABASE IF EXISTS 库名; ##表的管理 -- 表的创建 /* create table 表名( 列名 列的类型(长度)约束, 列名 列的类型(长度)约束, ... 列名 列的类型(长度)约束 ); */ -- 1.创建表Book CREATE TABLE Book( Id INT, bName VARCHAR(20), price DOUBLE, authorId VARCHAR(20), publishDate DATETIME, nation VARCHAR(20) ); DESC Book; SELECT * FROM Book; -- 2.表的修改: /* ①改列名 CHANGE COLUMN ②修改列的类型或约束 MODIFY COLUMN publ TIMESTAMP; ③添加新列 ADD COLUMN
alter table 表名 add column列名 类型 first|after 字段字段名; ④删除列 DROP COLUMN ⑤修改表名 RENAME TO */ ALTER TABLE book CHANGE COLUMN pubDate publ DATETIME; ALTER TABLE Book MODIFY COLUMN publ TIMESTAMP; ALTER TABLE Book ADD COLUMN page INT ;
ALTER TABLE Book ADD COLUMN AA INT AFTER price; ALTER TABLE Book DROP COLUMN page; ALTER TABLE Book RENAME TO book_ac; DESC book_ac; ##表的删除 DROP TABLE IF EXISTS book_ac; #表的复制 -- 1.仅仅复制表的结构 CREATE TABLE copy LIKE book_ac; -- 2.复制表的结构+数据 CREATE TABLE copy2 SELECT * FROM book_ac; -- 3.只复制部分数据 CREATE TABLE copy3 SELECT id,price FROM book_ac WHERE nation = '中国'; -- 4.仅仅复制某些字段 CREATE TABLE copy4 SELECT id,price FROM book_ac WHERE 1=3;
## 常见的数据类型 /* 数值型: 整型: tinyint smallint mediumint int/integer bigint 1字节 2字节 3字节 4字节 8字节 特点:① 如果不设置无符号还是有符号,默认的是有符号, 如果想设置无符号,需要添加unsigned关键字 ② 如果插入的数值超过整型的范围,回报out of rang异常, 并且插入临界值. ③ 如果不设置长度,会有默认的长度,长度代表显示的最大宽度 如果不够会用0在左边填充,但必须搭配zerofill使用 小数: 浮点型: float(M,D) double(M,D) 定点数: dec(M,D) decimal(M,D) 特点:① M代表整数部位 + 小数部位,D代表小数部位个数,如果超过范围,插入临界值 ② M和D都可以省略,如果是decimal,则M默认为10,D默认为0 如果是float和double,则会根据插入的数值的精度来决定精度 ③ 定点型的精度 较高,如果要求插入数值的精度较高, 如货币运算符则考虑使用 字符型: 较短的文本:char(M) M默认为1,可省略 固定长度的长度 空间的耗费比较耗费 效率高 varchar(M) 不可以省略 可变的长度 空间耗费高 效率低
其他 enum 用于保存枚举 set 用于保存集合 较长的文本: text blob(较长的二进制数据) 日期型: 字节 范围 受时区的影响 date 只保存=日期 time 只保存时间 year 只保存年 datetime 保存日期+时间 8 1000-9999 不受 timestamp 保存日期+时间 4 1970-2028 受 */ -- 原则:多选择的类型越简单越好,能保存数值的类型越小越好
All that work will definitely pay off