MSQL基础知识

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;
实例
  1. delimiter //  
  2. drop procedure if exists StatisticStore;  
  3. CREATE PROCEDURE StatisticStore()  
  4. BEGIN  
  5.     --创建接收游标数据的变量  
  6.     declare c int;  
  7.     declare n varchar(20);  
  8.     --创建总数变量  
  9.     declare total int default 0;  
  10.     --创建结束标志变量  
  11.     declare done int default false;  
  12.     --创建游标  
  13.     declare cur cursor for select name,count from store where name = 'iphone';  
  14.     --指定游标循环结束时的返回值  
  15.     declare continue HANDLER for not found set done = true;  
  16.     --设置初始值  
  17.     set total = 0;  
  18.     --打开游标  
  19.     open cur;  
  20.     --开始循环游标里的数据  
  21.     read_loop:loop  
  22.     --根据游标当前指向的一条数据  
  23.     fetch cur into n,c;  
  24.     --判断游标的循环是否结束  
  25.     if done then  
  26.         leave read_loop;    --跳出游标循环  
  27.     end if;  
  28.     --获取一条数据时,将count值进行累加操作,这里可以做任意你想做的操作,  
  29.     set total = total + c;  
  30.     --结束游标循环  
  31.     end loop;  
  32.     --关闭游标  
  33.     close cur;  
  34.     --输出结果  
  35.     select total;  
  36. END;  
  37. --调用存储过程  
  38. 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.csdn.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.csdn.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
 

   

posted @ 2020-09-25 23:43  erererer  阅读(682)  评论(0编辑  收藏  举报