MySql -- 必知必会

一、数据库语言分类

SQL语言一共分为4大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL。
DDL是数据定义语言的缩写,主要对数据库内部的对象进行创建、删除、修改等操作的语言。
DML只对表内部数据进行操作,而不涉及表的定义、结构的修改。
DDL更多由数据库管理员(DBA)使用,开发人员一般很少使用。
DQL是数据查询语言。
DCL是数据控制语言,是用来设置或更改数据库用户或角色权限的语句。

1.数据定义语言DDL(Data Definition Language)

(1) CREATE — 创建
CREATE作用语法
CREATE DATABASE创建数据库CREATE DATABASE db_name
CREATE FUNCTION创建用户定义的 SQL函数CREATE FUNCTION func_name([func_parameter]) RETURNS type func_body
CREATE INDEX创建索引CREATE INDEX index_name ON table_name(column_list)
CREATE PROCEDURE创建存储过程CREATE PROCEDURE procedure_name
CREATE TABLE创建表CREATE TABLE table_name(column_name data_type(size),…)
CREATE TRIGGER触发器,一种特殊的存储过程CREATE TRIGGER trigger_name trigger_time trigger_event FOR EACH ROW trigger_stmt
CREATE USER创建新用户CREATE USER user_name IDENTIFY BY password
CREATE VIEW创建视图CREATE VIEW view_name AS query
自定义函数示例
DELIMITER //
CREATE FUNCTION GetEmployeeInformationByID(id INT)
RETURNS VARCHAR(300)
BEGIN
RETURN(SELECT CONCAT('employee name:',employee_name,'---','salary: ',employee_salary) FROM employees WHERE employee_id=id);
END //
DELIMITER ;

-- 调用函数
SELECT GetEmployeeInformationByID(1);

创建存储过程示例
DELIMITER //
CREATE PROCEDURE GetAllProducts()
BEGIN
   SELECT *  FROM products;
END //
DELIMITER ;

-- 调用存储过程
CALL GetAllProducts();

创建触发器示例
-- tirgger_time:触发时机,为BEFORE或者AFTER
-- trigger_event:触发事件,为INSERTDELETE或者UPDATE
delimiter //
DROP TRIGGER IF EXISTS delete_trigger;
CREATE TRIGGER delete_trigger BEFORE DELETE
ON products FOR EACH ROW
BEGIN
INSERT INTO products_delete 
VALUES(OLD.prod_id,OLD.vend_id,OLD.prod_name,OLD.prod_price,OLD.prod_desc);
END //
delimiter ;

-- 删除测试,执行删除命令后,删除表会新增删除的信息
SET foreign_key_checks = 0; -- 先设置外键约束检查关闭
DELETE FROM products WHERE prod_id = 'FB';
SET foreign_key_checks = 1; -- 开启外键约束检查,以保持表结构完整性
创建视图示例
DROP VIEW IF EXISTS products_view;
CREATE VIEW products_view AS
SELECT products.*,productnotes.note_id,productnotes.note_date 
FROM products,productnotes 
WHERE products.prod_id = productnotes.prod_id;
(2) SHOW — 展示
SHOW
SHOW CREATE DATABASE
SHOW CREATE FUNCTION
SHOW CREATE PROCEDURE
SHOW CREATE TABLE
SHOW CREATE VIEW
(3) DROP — 删除
DROP
DROP DATABASE
DROP FUNCTION
DROP INDEX
DROP PROCEDURE
DROP TABLE
DROP TRIGGER
DROP USER
DROP VIEW
(3) ALTER — 修改
ALTER
ALTER TABLE table_name add column
ALTER TABLE table_name change old_columnName new_columnName new_type
ALTER TABLE table_name modify column new_type
ALTER TABLE table_name drop columns
ALTER DATABASE
ALTER FUNCTION
ALTER PROCEDURE
ALTER VIEW

(4) TRANCATE-- 删除再创建拥有相同结构的表

2.数据操纵语言DML(Data Manipulation Language)

(1) INSERT — 插入值

INSERT INTO table_name(column_name) VALUES(values);
INSERT INTO table_name1(column_name) SELECT column_name FROM table_name2;  

(2) UPDATE – 更新值

UPDATE table_name SET column_name = new_value WHERE column_name = value;
UPDATE table_name1,table_name2 
SET table1_name.column1_name = table2_name.column_name2 
WHERE table1_name.column_name0 = table2_name.column_name0;

(3) DELETE – 删除值

DELETE FROM table_name WHERE column_name = value;

3.数据查询语言DQL(Data Query Language)

SELECT column_list FROM tabel_name;
SELECT column_list INTO table2_name FROM table1_name;

4.数据控制语言DCL(Data Control Language)

GRANT --- 创建用户并赋予权限
GRANT ALL ON dbname.* TO 'user'@'192.168.12.9' IDENTIFIED BY 'password';
GRANT ALL ON *.* to 'user'@localhost; 
GRANT ALL ON *.* to 'user'@localhost WITH GRANT OPTION; -- 同时赋予GRANT权限
REVOKE --- 回收权限 
REVOKE ALL ON *.* to 'user'@localhost;
SHOW GRANTS FOR 'user'@localhost;

二、通配符和正则表达式

1.通配符

(1) LIKE 操作符

SELECT * FROM products WHERE prod_name LIKE 'Jet%';  -- 匹配Jet开头
SELECT * FROM products WHERE prod_name LIKE '%Jet';  -- 匹配Jet结尾
SELECT * FROM products WHERE prod_name LIKE '%Jet%';  -- 匹配包含Jet

(2) 通配符(%和_)
% 表示任何字符出现的任意次数
_ 表示只匹配单一字符

2.正则表达式

. 表示匹配任意一个字符
| 和 [] 都表示or匹配
\\ 表示匹配特殊字符的前导,如\\. , \\f , \\n , \\r 等

字符类

说明
[:alnum:]任意字符和数字(同[a-zA-Z0-9])
[:alpha:]任意字符(同[a-zA-Z])
[:blank:]空格和制表(同[\t])
[:cntrl:]ASCII控制字符(ASCII 0到31和127) 任意数字(同[0-9])
[:digit:]任意数字(同[0-9])
[:graph:]与[:print:]相同,但不包括空格
[:lower:]任意小写字母(同[a-z])
[:print:]任意可打印字符
[:punct:]既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:]包括空格在内的任意空白字符(同[\f\n\r\t\v])
[:upper:]任意大写字母(同[A-Z])
[:xdigit:]任意十六进制数字(同[a-fA-F0-9])

重复元字符

元字符说明
*0个或多个匹配
+1个或多个匹配(同{1,})
?0个或1个匹配(同{0,1})
{n}指定数目匹配
{n,}不少于指定数目的匹配
{n,m}匹配数码范围内
定位符说明
^文本的开始
$文本的结束
[[:<:]]词的开始
[[::>]]词的结束
SELECT * FROM products WHERE prod_name REGEXP '000'; -- 包含000
SELECT * FROM products WHERE prod_name REGEXP '0{3}'; -- 作用同上
SELECT * FROM products WHERE prod_name REGEXP '.000'; -- 包含四个字符,其中后三位为0
SELECT * FROM products WHERE prod_name REGEXP '1 ton|2 ton|5 ton'; -- | 表示或
SELECT * FROM products WHERE prod_name REGEXP '[1-5] ton'; -- []区间表示,作用同上
SELECT * FROM products WHERE prod_name REGEXP '\\.'; -- 匹配包含圆点的
SELECT * FROM products WHERE prod_name REGEXP '[:digit:]{3}'; -- 包含三位数字
SELECT * FROM products WHERE prod_name REGEXP '^\\.'; -- 匹配圆点开头
SELECT * FROM products WHERE prod_name REGEXP '\\)$'; -- 匹配)结尾

三、函数

1.字符串函数

函数功能
CONCAT(S1,S2,…,SN)连接S1,S2,…Sn为一个字符串
INSERT(STR,x,y,instr)将字符串str从第x位置开始,y长度的子串替换为字符串instr
LOWER(str)将字符串str中所有字符字符变为小写
UPPER(str)将字符串str中所有字符字符变为大写
LEFT(str,x)返回字符串str最左边的x个字符
RIGHT(str,x)返回字符串str最右边的x个字符
LPAD(str,n,pad)用字符串pad对str最左边进行填充,填充长度为n
RPAD(str,n,pad)用字符串pad对str最右边进行填充,填充长度为n
LTRIM(str)去掉字符串str左侧的空格
RTRIM(str)去掉字符串str右侧的空格
REPEAT(str,x)返回str重复x次的结果
REPLACE(str,a,b)用字符串b替换字符串str中所有出现的字符串a
STRCMP(s1,s2)比较字符串s1和s2
TRIM(str)去掉字符串行尾和行头的空格
SUBSTRING(str, x,y)返回从字符串str x位置起y个字符长度的字符串

2.数值函数

函数功能
ABS(x)返回x的绝对值
CEIL(x)返回大于x的最小整数值
FLOOR(x)返回小于x的最大整数值
MOD(x)返回x/y的模
RAND(x)返回0~1内的随机值
TRUNCATE(x,y)返回数字x截断为y位小数的结果

3.日期和时间函数

函数功能
CURDATE()返回当前日期
CURTIME()返回当前时间
NOW()返回当前的时间和日期
UNIX_TIMESTAMP(date)返回日期date的UNIX时间戳
FROM_UNIXTIME()返回UNIX时间戳的日期值
WEEK(date)返回日期date为一年中的第几周
YEAR(date)返回日期date的年份
HOUR(time)返回time的小时
MINUTE(time)返回time的分钟
MONTHNAME(date)返回date的月份名
DATE_FORMATE(date,fmt)返回按字符串fmt格式化日期date值
DATE_ADD(date,INTERVAL expr type)返回一个日期或时间值加上一个时间间隔的时间值
DATEDIFF(expr,expr2)返回起始时间expr和结束时间expr2之间的天数。

4.流程函数

函数功能
IF(value, t,f)如果value是真,返回t,否则f
IFNULL(value1,value2)如果value1不为空,返回value1,否则value2
CASE WHEN value1 THEN result1 else default END如果value1是真,返回result1,否则default
CASE expr WHEN value1 THEN result1 else default END如果expr等于value1,返回result1,否则default

四、事务

成功运行则提交,否则回滚。

DELIMITER $$  
BEGIN  
DECLARE t_error INTEGER DEFAULT 0;  
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1 ;        
START TRANSACTION;  
UPDATE table1 SET a = '111';
INSERT INTO table2 (b) VALUES ('222');
INSERT INTO table3 (c) VALUES ('333');   
IF t_error = 1 THEN  
   ROLLBACK;  
ELSE  
   COMMIT;  
END IF;      
END$$  
DELIMITER ;  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mysql示例数据库 employee,这个大家也可以到github官网下载。 https://github.com/datacharmer/test_db test_db A sample database with an integrated test suite, used to test your applications and database servers This repository was migrated from Launchpad. See usage in the MySQL docs Where it comes from The original data was created by Fusheng Wang and Carlo Zaniolo at Siemens Corporate Research. The data is in XML format. http://timecenter.cs.aau.dk/software.htm Giuseppe Maxia made the relational schema and Patrick Crews exported the data in relational format. The database contains about 300,000 employee records with 2.8 million salary entries. The export data is 167 MB, which is not huge, but heavy enough to be non-trivial for testing. The data was generated, and as such there are inconsistencies and subtle problems. Rather than removing them, we decided to leave the contents untouched, and use these issues as data cleaning exercises. Prerequisites You need a MySQL database server (5.0+) and run the commands below through a user that has the following privileges: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW Installation: Download the repository Change directory to the repository Then run mysql < employees.sql If you want to install with two large partitioned tables, run mysql < employees_partitioned.sql Testing the installation After installing, you can run one of the following mysql -t < test_employees_md5.sql # OR mysql -t < test_employees_sha.sql For example: mysql -t < test_employees_md5.sql +----------------------+ | INFO | +----------------------+ | TESTING INSTALLATION | +----------------------+ +--------------+------------------+----------------------------------+ | table_name | expected_records | expected_crc | +--------------+------------------+----------------------------------+ | employees | 300024 |

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值