-
回顾查看全部
-
修改数据库查看全部
-
SHOW WARNINGS 查看警告信息查看全部
-
删除主键约束:DROP TABLE tbname DROP PRIMARY KEY
删除唯一约束:DROP TABLE tbname DROP {INDEX|KEY} index_name
删除外键约束:ALTER TABLE tbname DORP FEIEIGN KEY fk_symbol
查看全部 -
添加主键约束:ALTER TABLE tb_name ADD [CONSTRANINT [约束名]] PRIMARY KEY [index_type] (index_col_name,...)
添加唯一约束:ALTER TABLE tb_name ADD [CONSTRANINT [约束名]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...)
添加外键约束:ALTER TABLE tb_name ADD [CONSTRANINT [约束名]] FOREIGN KEY [index_name] (index_col_name,...) references_definition
添加/删除默认约束: ALTER TBALE tb_name ALTER [COLUMN] col_name {SET DEFAULT 默认值 | DROP DEFAULT}
查看全部 -
添加单列 ALTER TABLE table_name ADD [COLUMN] col_name column_definition[FIRST | AFTER col_name];
添加多列: ALTER TABLE table_name ADD [COLUMN] (col_name,column_definitions ,...)
删除单列 : ALTER TBALE table_name DROP [COLUMN] col_name;
删除多列:ALTER TBALE table_name DROP [COLUMN] col_name,DROP column...;
查看全部 -
default、not null只能是列级约束
但是primary key、foreign key、unique可以都是
查看全部 -
实际开发中不怎么使用物理约束,因为只有innodb引擎支持,通常使用逻辑约束
查看全部 -
创建外键约束的要求
查看全部 -
约束分类:
查看全部 -
显示当前打开的数据库
select database();
浮点型数据类型
FLOAT(8,2)表示数字长度为8,小数点后数字为2,小数点前为6位
约束值类型
create table tb_name(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
gender ENUM('男','女’,'未知') DEFAULT '未知'
);
ENUM()为约束值,插入数据时,只允许括号里的值插入
默认约束DEFAULT '值'
创建默认约束后,当插入值时没有为对应字段赋值,就使用默认值填充
建表后添加默认约束
ALTER TABLE tb_name ALTER age SET DEFAULT 15;
删除 ALTER TABLE tb_name ALTER 列名 DROP DEFAULT;
建表
create table table_name(
id INT UNSIGNED NOT NULL,
age TINYINT UNSIGNED,
column_name data_type
)
NOT NULL非空约束
最后一个字段不需要逗号
UNSIGNED表示值不允许出现负数
在某一库下查询所有表
select tables from mysql;
向表中插入数据
insert into tb_name (字段1,字段2) value(值1,值2)
当有n个字段时,插入的值也是n个,可以不要(字段1,字段2)
有非空约束的字段插入时必须有值
自定增长类型
AUTO_INCREMENT
自动编号,必须和主键组合使用,起始值为1,增量为1
插入数据时,可以不赋值,注意,给自动增长的列赋值后,再次增长
就从赋值后的int值开始加1
主键约束PRIMARY KEY
主键保证了数据的唯一性,主键自带非空约束
create table tb_name(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL
);
PRIMARY KEY是主键的关键字
当添加自动增长后,那么对应字段就不需要再赋值
建表时没有创建主键,可以创完再加
ALTER TABLE tb_name ADD CONSTRAINT pk_name PRIMARY KEY (列);
删除:ALTER TABLE tb_name DROP PRIMARY KEY;
唯一约束UNIQUE KEY
唯一约束可以为空,且可以有多个
注意的是,如果字段中有一个空字段,那么再此插入时,对应字段就
不可以再为空
建表后再添加唯一约束
ALTER TABLE tb_name ADD UNIQUE (username);
删除唯一约束
删除前需要查看索引的名称show index from tb_name\G;
删除约束ALTER TABLE tb_name DROP INDEX 列名
外键约束
子表必须和父表的使用相同的引擎(InnoDB)
子表的参照列必须和父表数据类型、是否有符号相同
外键列和参照列必须要有索引
例如:主表建表时id字段为 id INT UNSIGNED,
子标建立外键
create table tb_name (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
zid INT UNSIGNED,
FOREIGN KEY (zid)REFERENCES 父表(id) ON DELETE CASCADE
);
参照父表创建的子表参照列会自动添加索引
ON DELETE 值 表示子表参照的操作的类型,值可以是CASCADE,
表示父表删除或更新记录时,子表自动执行相应操作,RESTRICT表示拒绝对
父表的删除或者更新,SET NULL表示父表记录删除后,子表的外键列为空,其
他值不删除
建表后添加外键约束
ALTER TABLE tb_name ADD FOREIGN KEY (子表列) REFERENCES (参照列)
删除ALTER TABLE tb_name DROP FOREIGN KEY 外键名;
为外键表插入数据
在子标插入记录前,需要先在父表插入记录,子标的外键列可以不插入记录(前
提是建表时没有非空约束),想要插入记录,子表的外键列元素必须在父表中
有对应的值,否则不允许插入
查看索引
show indexes from tb_name\G;
Column_name 表示索引创建的位置
查看建表时的信息
show create table tb_name;
向表插入列
alter table tb_name add 列名 数据类型 符号信息 是否为空 AFTER 添
加在哪列之后
如果没有AFTER和列值,就直接添加到最后一列
alter table tb_name add 列名 数据类型 符号信息 是否为空 FIRST
表示添加的列在所有列的前端
删除列
alter table tb_name drop 列名
修改数据表列的位置
ALTER TABLE tb_name MODIFY 列名 列的定义 FIRST;
修改列数据类型CHANGE
ALTER TABLE tb_name CHANGE 列名 数据类型
及修改数据类型又修改字段名
ALTER TABLE tb_name CHANGE 旧列名 新列名 数据类型
修改表的名字
ALTER TABLE tb_name RENAME new_tbname;
update语句
省略条件将修改所有记录
update tb_name set age=age+5;更新所有的列,给年龄加5
带条件的更新语句
update tb_name set age=age-id where id%2=0;
将id为偶数的记录年龄修改为 年龄减去id
delete语句
delete from tb_name where 条件
分组 group by
select 列名 from tb_name group by 列名;
带有条件的分组
select 列名 from tb_name group by having 条件;
为记录排序
select * from tb_name order by 列名
默认为升序
倒序select * from tb_name order by 列名 desc;
限制查询条数的语句
select * from tb_name limit 数量;
当需要查询中间的语句时,第一条索引是从0开始的
select * from tb_name limit 2,2;
假设id从1开始,此句返回id为3和4的记录
查询平均值
select AVG(列名) from tb_name;
做四舍五入查询
select round(带有小数的数,需要保留的位数) from ta_name;
子查询
select * from tb_name where money>= (select avg(money) from tb_name);
含义是查询价格列大于等于平均价格的列
当子查询返回多个结果集时,作比较运算系统不知道该和哪个比较
any、some表示符合任意一个就行,all表示要符合所有结果
select * from tb_name where 列名1 > any (select 列名1 from tb_name where="超级本");
子查询返回的列一定要和比较的列相同
insert select语句
insert 子表名(列名) select goods_cate from tb_goods group by goods_cate;
多表连接
update 需要更改的表 inner join 参照表 on 需要更新的列=参照表的列
set 需要更新的列=参照表的对应值;
例update tb_goods inner join tb_goods_cates on goods_cate=cate_name
set goods_cate=cate_id;
在建表时就插入数据
create table tb_goods_brands(
brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
brand_name VARCHAR(40) NOT NULL)
select brand_name from tb_goods group by brand_name;
当连接其他表后,商品表原先的varchar数据类型需要改成int类型
alter table tb_name
change 旧列名 新列名 新列名的数据类型
内连接(仅显示符合条件的连接记录)可以使用JOIN\INNER JOIN
select 需要显示的字段名 from 表名 inner join 参照表名 on 显示列=参照列
select goods_id,goods_name,cate_name from tb_goods inner join
tb_goods_cates on tb_goods.cate_id = tb_goods_cates.cate_id;
内连接显示的是两张表中都符合条件的记录
左外连接显示左边表中所有记录和右边表中符合条件的记录
select 需要显示的字段名 from 表名 left join 参照表名 on 显示列=参照列
左外连接和右外连接中没有的字段就显示NULL
右外连接显示左边表符合条件的记录和右边表的所有记录
select 需要显示的字段名 from 表名 right join 参照表名 on 显示列=参照列
一张表做外连接,需要给一张表起两哥个别名
select a.type_id,a.type_name,b.type_name from tb_name as a left join
tb_name as b on a.parent_id = b.type_id;
删除表中重复的记录
1先查询出表中哪些记录是重复的
select goods_id,goods_name from tb_goods group by goods_name having
count(goods_name)>1;
2删除表中重复的记录,保留id最小的
delete t1 from tb_goods as t1 left join (select goods_id,goods_name
from tb_goods group by goods_name having count(goods_name)>1) as
t2 on t1.goods_name = t2.goods_name where t1.goods_id>t2.goods_id;
字符函数
1、CONCAT() 字符连接
假设姓氏列和名字列封开,想要显示姓名
SELECT CONCAT(姓列,名列) as name from tb_name;
2、CONCAT_WS() 使用指定符号分割字符
最少要有三个参数,第一个指定风格符
SELECT CONCAT_WS('-','a','b');
假设有省-市-区散列需要按格式分
SELECT CONCAT_WS('-',省,市,区)
3、数字格式化
SELECT FORMAT(123456.789,2);
结果:123,456,79
4、将字符转换为大小写
SELECT LOWER('MySQL');
结果:mysql
select upper('abCde');
结果:ABCDE
5、从左右截取字符串
select left('mysql',2);
结果:my
select right('mysql',2);
结果:ql
7、获取字符串长度
select length('MySQL');
结果:5
8、删除前边空格,后边空格和所有空格
前select ltrim(' abc'); 结果:abc
后select rtrim('abc '); 结果:abc__
所有select trim(' abc '); 结果:abc
除了删除空格,还可以删除指定字符
前 select trim(leading '?' from '???mysql???');
结果:mysql???
后 select trim(trailing '?' from '???mysql???');
结果:???mysql
所有 select trim(both '?' from '???mysql???');
结果:mysql
9、替换字符串中的字符
select replace('??my??sql??','?','');
结果:mysql
10、截取字符串
select substring('mysql',2,2) 结果:ys
mysql字符串的下标从1开始,如果是('mysql',-2,2),表示倒着截取
通配符和模式匹配的用法
select * from tb_name where 列名 (not)like '%a';
select * from tb_name where 列名 (not)like '_a';
当要查询的列中带有%时:like '%1%%' escape '1';
escape表示'1'后面不是通配符
数值运算符和函数
1、CEIL()
select CEIL(1.01); 结果:2
2、FLOOR()
select FLOOR(1.99); 结果:1
3、POWER 幂运算
select POWER (3,2); 结果:9
4、ROUND() 四舍五入
select ROUND(3.1415,2); 结果:3.14
5、TRUNCATE() 数字截取
select TRUNCATE()
比较运算符
select 35 between 10 and 40; 返回值:1
意为35在10和40之间么
select ‘A’ in(‘A’,‘B’,‘C’,‘D’); 返回值:1
意为A是不是四选项中的一个
select ‘a’ in ‘a’ 返回值:1
意为a是不是a
日期时间函数
select now(); 返回值:yyyy-MM-dd HH:mm:ss
日期函数
select curdate();
时间函数
select curtime();
时间差函数
select datediff('2013-3-12','2024-3-12');
求和 sum()
求最大值 max()
求最小值 min()
求总数 count()
求平均值 avg()
修改mysql密码
set password = password();
查看全部 -
GROUP BY的规定:
1、GROUP BY 后面可以包含多个列,这就是嵌套。
2、如果GROUP BY进行了嵌套,数据将在最后一个分组上进行汇总。
3、GROUP BY子句中列出来的每个列必须是检索列或有效的表达式(但不能是聚集函数),如果在SELECT中使用了表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。
4、除了聚集语句外,SELECT语句中的每一个列都必须在GROUP BY子句中给出。
5、如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多个NULL,它们将作为一个分组返回。
6、GROUP BY子句必须在WHERE 子句之后,ORDER BY 子句之前。
查看全部
举报