MySQL 常用命令和基础语法

-- mysql 命令
SHOW DATABASES;		#查看目前系统中存在的数据库
use database_name;		#切换数据库
SHOW TABLES;		#显示当前数据库下面的所有可用的表
SELECT * FROM table_name;		#显示该表中的所有数据
DESC table_name;		#显示该表的结构
EXIT;		#退出MYSQL命令行操作


-- DDL-数据定义语句

#创建数据库
CREATE DATABASE [IF NOT EXISTS] DATABASE_name;

#修改数据库字符集
ALTER DATABASE DATABASE_name 
CHARACTER SET = charset_name;

#删除数据库
DROP DATABASE DATABASE_name;

#创建表
CREATE TABLE table_name(
	col_name data_type CONSTRAINT,
	col_name data_type CONSTRAINT,
	col_name data_type CONSTRAINT
) [ENGINE = ENGINE_name | [DEFAULT] CHARACTER SET [=] charset_name];


-- 表的常用操作

SHOW TABLES;		#显示当前数据库中的表
DESC table_name;		#查看表的结构
DROP TABLE table_name;		#删除表
CREATE TABLE new_table_name LIKE copied_table_name;		#只复制一张表的结构
CREATE TABLE new_table_name AS (SELECT * FROM copied_table_name);#复制一张表的结构及数据

ALTER TABLE table_name RENAME [AS|TO] new_table_name;		#重命名表
ALTER TABLE table_name ADD [COLUMN] col_name col_definition;		#为表添加一个新列
ALTER TABLE table_name CHANGE [COLUMN] old_col_name new_col_name col_definition;#修改列名及列类型
ALTER TABLE table_name MODIFY [COLUMN] col_name col_definiton;		#只修改列类型
ALTER TABLE table_name DROP [COLUMN] col_name;		#删除列

-- 创建主键的方法

#直接在字段定义后面声明主键
CREATE TABLE demo(
	id INT PRIMARY KEY,
	......
);

#用constraint声明主键
CREATE TABLE demo(
	id INT,
	......,
	CONSTRAINT pk_demo PRIMARY KEY (id)		#外键命名规范:pk_table_name
);

CREATE TABLE demo(
	id INT
	`name` VARCHAR(10),
	......,
	PRIMARY KEY (id,`name`)		#复合主键
);

#用ALTER语句补充声明主键
ALTER TABLE demo ADD CONSTRAINT pk_demo PRIMARY KEY (sid);

#删除主键的方法
ALTER TABLE demo DROP PRIMARY KEY;


-- 创建外键的方法
CREATE TABLE demo(
	cid INT PRIMARY KEY,
	sid INT,
	FOREIGN KEY (sid) REFERENCES demo (sid)
);

#通过constraint添加外键
ALTER TABLE demo ADD CONSTRAINT fk_1 FOREIGN KEY (sid) REFERENCES demo (sid) 
ON DELETE CASCADE ON UPDATE CASCADE;
/*
CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新子表中匹配的行。
					ON DELETE CASCADE 和 on  UPDATE CASCADE 都被 InnoDB 所支持。
SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。
					这些在外键列没有被设为 NOT NULL 时才有效。
					ON DELETE SET NULL 和 ON UPDATE SET NULL 都被支持。
NO action:默认为restrict,拒绝删除或者更新父表
*/

#删除外键的方法
ALTER TABLE table_name DROP FOREIGN KEY fk_name;

-- 自增长 auto_increment
CREATE TABLE demo(
	id INT auto_increment PRIMARY KEY,
	`name` VARCHAR(10),
	......ALTER);

-- 唯一约束  UNIQUE

-- 非空约束 NOT NULL

-- 检查约束
CREATE TABLE demo(
	......,
	sex SET('男','女'),
	payment ENUM('货到付款','在线支付')
);

-- 默认值约束
CREATE TABLE demo(
	tel VARCHAR(50) DEFAULT 'default'
);

/*
数据库三大范式
第一范式:确保每列保持原子性
第二范式:确保每行的唯一性
第三范式:确保每列都和主键列直接相关,而不是间接相关
*/


-- DML-数据操纵语句

#插入数据
INSERT INTO table_name [col_name] VALUES (value1,value2,...);

-- 插入多行数据的方法

#从其他表从选择相应的内容插入到新表
INSERT INTO table_name (col_name) SELECT col_name FROM source_table_name;

#利用多条insert语句批量处理
INSERT INTO table_name (col1_name,col2_name,...)
VALUES
	(col1_value,col2_value,...),
	(col1_value,col2_value,...),
	(col1_value,col2_value,...),
	(col1_value,col2_value,...);

#修改数据
UPDATE table_name SET col_name = new_value WHERE update_condition;

#删除数据
DELETE FROM table_name [WHERE delete_condition];		#按条件删除一条或多条记录
TRUNCATE TABLE table_name;		#清空全表数据,并重置自动增长值,无法用于有外键约束的表

-- DQL-数据查询语句

SELECT col_name FROM table_name WHERE select_condition GROUP BY col_name ORDER BY col_name LIMIT 0,1;


/*
mysql 变量

mysql中,变量分为三类,局部变量,会话变量,全局变量。

局部变量主要用在函数以及存储过程中,
定义:declare c int default 0;
调用:select c;
记住变量名前不需要加@;

会话变量仅对当前客户端连接有效,
定义:set @var := ‘abc’;
调用:select name = @var;
记住变量前加一个@;

全局变量法力无边,什么时候都有效。
定义:set @@var := ‘abc’;
调用:select name = @@var;
记住变量前加2个@

*/


-- 分支语句

#条件结构
IF 				THEN
ELSEIF    THEN
ELSE
END IF;
#CASE
DECLARE i INT DEFAULT 1;
CASE i
	WHEN 1 THEN ...
	WHEN 2 THEN ...
	ELSE
END CASE;

-- 循环语句

#REPEAT
REPEAT
	action
	UNTIL condition_
END REPEAT;

#WHILE
WHILE condition_
	DO
		aciton
END WHILE;

#LOOP
a:LOOP
	action
	IF ? THEN ITERATE a; #ITERATE 相当于 CONTINUE
	ELSE LEAVE a;		#LEAVE 相当于 break
END LOOP a;

-- PROCEDURE   类型 in out inout

#语法结构
CREATE PROCEDURE proce_name(i INT)
BEGIN



END;


-- FUNCTION 

#语法结构
CREATE FUNCTION func_name(i int) 
RETURNS data_type
BEGIN

END;


-- 游标

#创建游标
DECLARE cursor_name CURSOR FOR select_statement;
#开启游标
OPEN cursor_name;
#读取
FETCH [from] cursor_name INTO var_name [,var_name]...
#关闭
CLOSE cursor_name;

#实例
CREATE PROCEDURE cursorTest()
	BEGIN
		-- 定义变量
		DECLARE done INT DEFAULT FALSE;
		DECLARE idd INT;
		DECLARE namea VARCHAR(20);
		-- 定义游标
		DECLARE test_cursor CURSOR FOR SELECT id,`name` FROM test;
		-- 定义条件处理器:当出现not found 的异常后执行set done=true 
		DECLARE CONTINUE HANDLER for NOT found SET done = true;

		-- 开启游标
		OPEN test_cursor;
		a:WHILE true DO
		-- 读取
			FETCH test_cursor INTO idd,namea;
			IF done THEN
				LEAVE a;
			ELSE
				SELECT idd,namea;
			END IF;
		END WHILE a;
		CLOSE test_cursor;
	END;


-- 触发器

#基本语法结构
CREATE [DEFINER = {USER | CURRENT_USER}]
TRIGGER trigger_name
trigger_time		#trigger_time:{BEFORE | AFTER}
trigger_event		#trigger_event:{INSERT | UPDATE |DELETE}
ON table_name FOR EACH ROW
[BEGIN]
trigger_body
[END;]


-- 事务
SET @autocommit = OFF;
#SAVEPOINT
SAVEPOINT sp_name;
#ROLLBACK
ROLLBACK TO sp_name;
#COMMIT
COMMIT;

原文地址:https://www.cnblogs.com/milesma/p/12023431.html