MSQL基础知识
一、DDL(data definition language)数据库定义语言:
建表
CREATE TABLE table_name(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
score TINYINT UNSIGNED NOT NULL DEFAULT 0
)ENGINE=InnoDB,DEFAULT charset=utf8,AUTO_INCREMENT=7;
删表
DROP TABLE IF EXISTS tb_name;
显示表
SHOW TABLES;
查看表结构
DESCRIBE tb_name;
表重命名
RENAME TABLE name_old TO name_new;
修改表
ALTER TABLE tb_name ADD COLUMN address varchar(80) NOT NULL;
ALTER TABLE tb_name DROP address;
ALTER TABLE tb_name CHANGE score score SMALLINT(4) NOT NULL;
二、DML(data manipulation language)数据操纵语言:
选择数据
select column1,column2 from tablename where column1 <> column2 group by ... hiving .....;
插入语句
INSERT INTO tb_name(id,name,score)VALUES(NULL,‘张三‘,140),(NULL,‘张四‘,178),(NULL,‘张五‘,134);
数据更新
UPDATE tb_name SET score=189 WHERE id=2;
删除数据
DELETE FROM tb_name WHERE id=3;
三、DCL(Data Control Language)数据库控制语言:
创建用户
CREATE USER name IDENTIFIED BY ‘ssapdrow‘;
更改密码
SET PASSWORD FOR name=PASSWORD(‘fdddfd‘);
查看权限
SHOW GRANTS FOR name; //查看name用户权限
授权
grant select, insert, update, delete on testdb.* to name; //给name用户下所有testdb数据库所有数据授权select、insert, update, delete等;
去除权限
REVOKE SELECT ON db_name.* TO name; //GRANT的反操作,去除权限;
四、数据类型
数值型数据类型
类型 | 说明 | 存储需求(取值范围) |
---|---|---|
tinyint | 很小整数 | 1字节([0~255]、[-128~127]); 255=2^8-1;127=2^7-1 |
smallint | 小整数 | 2字节(0~65535、-32768~32767) ;65535=2^16-1 |
mediumint | 中等 | 3字节(0~16777215) ;16777215=2^24-1 |
int(integer) | 普通 | 4字节(0~4294967295) ;4294967295=2^32-1 |
bigint | 大整数 | 8字节(0~18446744073709551615);18446744073709551615=2^64-1 |
float | 单精度浮点数 | 4字节 |
double | 双精度浮点数 | 8字节 |
decimal | 压缩的“严格”定点数 | M+2字节 |
说明:语句decimal(5,2)规定了存储的值将不会超过5位数字,开且小数点后面有2位数字。
字符类型
类型 | 说明 | 存储需求(取值范围) |
---|---|---|
char(n) | 字符数小于n,则以空格补于其后 | 固定长度,最多255个字符 |
varchar(n) | varchar是存入的实际字符数+1个字节 | 固定长度,最多65535个字符 |
tinytext | 可变长度,最多255个字符 | |
text | 可变长度,最多65535个字符 | |
mediumtext | 可变长度,最多2的24次方-1个字符 | |
longtext | 可变长度,最多2的32次方-1个字符 |
日期时间类型
类型 | 说明 | 存储需求(取值范围) |
---|---|---|
date | 日期 ‘2008-12-2‘ | |
time | 时间 ‘12:25:36‘ | |
datetime | 日期时间 ‘2008-12-2 22:06:44‘ | |
timestamp | 自动存储记录修改时间 |
五、触发器
触发器语句
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW
BEGIN 执行语句列表 END
说明:其中触发事件为INSERT、DELETE或者UPDATE
实例
DELIMITER || //将结尾改为 ||
CREATE TRIGGER demo BEFORE DELETE
ON users FOR EACH ROW
BEGIN
INSERT INTO logs VALUES(NOW());
INSERT INTO logs VALUES(NOW());
END
||
DELIMITER ;
六、存储过程与游标
创建存储过程
CREATE PROCEDURE StatisticStore(out s1 int,in s2 int)
BEGIN
END
调用存储过程
call StatisticStore(s1,s2);
创建游标
declare cur cursor for select name,count from store where name = ‘iphone‘;
// cur为游标变量
指定游标结束时返回值
declare continue HANDLER for not found set done = true;
循环读取游标中的数值
open cur;
while not done do
fetch cur into var1,var2;
end while;
close cur;
实例
- delimiter //
- drop procedure if exists StatisticStore;
- CREATE PROCEDURE StatisticStore()
- BEGIN
- --创建接收游标数据的变量
- declare c int;
- declare n varchar(20);
- --创建总数变量
- declare total int default 0;
- --创建结束标志变量
- declare done int default false;
- --创建游标
- declare cur cursor for select name,count from store where name = ‘iphone‘;
- --指定游标循环结束时的返回值
- declare continue HANDLER for not found set done = true;
- --设置初始值
- set total = 0;
- --打开游标
- open cur;
- --开始循环游标里的数据
- read_loop:loop
- --根据游标当前指向的一条数据
- fetch cur into n,c;
- --判断游标的循环是否结束
- if done then
- leave read_loop; --跳出游标循环
- end if;
- --获取一条数据时,将count值进行累加操作,这里可以做任意你想做的操作,
- set total = total + c;
- --结束游标循环
- end loop;
- --关闭游标
- close cur;
- --输出结果
- select total;
- END;
- --调用存储过程
-
call StatisticStore();
七、视图
视图是一种虚拟表,不改变表结构就可以对表中数据进行计算,对数据提供安全性。
创建
create view v1 as select from where ;
优点:
1.简化用户操作
2.能以不同的角度观察同一个数据库
3.对重构数据库提供了逻辑独立性:利用视图将需要的数据合并或者筛选,但是不影响原表的数据和结构;
4.对机密数据提供安全保护: 可以建立不同的视图对用不同的用户,以达到安全的目的。
八、函数
字符串函数
CHAR_LENGTH(str) //返回字符串长度
CONCAT(s1,s2,...) //字符串拼接
CONCAT_WS(x,s1,s2,...) //字符串拼接中间用X间隔
LEFT(s,n)、RIGHT(s,n) //返回字符串s最左边/最右边n个字符串
LTRIM(s)、RTRIM(s) //删除字符串s左边(右边)的空格
TRIM(s1 FROM s) //删除字符串s左边和右边S1的字符串,没有S1删除空格
REPEAT(s,n) //返回由一个重复字符串s重复n次的字符串
REPLACE(s,s1,s2) //用字符串s2代替字符串s中s1的字符串的值
STRCMP(s1,s2) //s1与s2相同返回0,大于返回1,小于返回-1
SUBSTRING(s,n,len) //返回s中位置n开始的长度为len的字符串
LOCATE(str1,str)、POSITION(str1 IN str)、INSTR(str,str1) //返回字符床str1在str中开始的位置
REVERSE(s) //反转字符串
日期函数
CURDATE() //返回现在"YYYY-MM-DD"
CURRENT_DATE() //返回日期"YYYYMMDD"
DATE_ADD(‘2010-12-31 23:59:59‘, INTERVAL 1 SECOND) //表示的就是把第一个时间加1秒
DATE_SUB(date,INTERVAL expr type) //表示的就是把第一个时间加1秒
CURRENT_TIMESTAMP()、LOCALTIME()、NOW()、SYSDATE() //返回当前日期和时间值,格式为"YYYY_MM-DD HH:MM:SS"或"YYYYMMDDHHMMSS"
UNIX_TIMESTAMP(date) //返回一个格林尼治标准时间1970-01-01 00:00:00到现在的秒
mysql常用语句:https://blog.****.net/sinat_35861727/article/details/78866904
mysql正则表达式:https://www.runoob.com/mysql/mysql-regexp.html
mysql触发器:https://www.cnblogs.com/zzlback/p/12660560.html
mysql面试题:https://www.cnblogs.com/diffrent/p/8854995.html 或者 https://blog.****.net/hwq1987/article/details/6670300
sql随机数:https://www.cnblogs.com/wuming/archive/2010/02/24/1672906.html
mysql数据的导入及导出:https://www.runoob.com/mysql/mysql-database-import.html
mysql操作大全:https://www.runoob.com/mysql/mysql-sql-injection.html
mysql中的函数:https://www.cnblogs.com/poloyy/archive/2004/01/13/12890763.html