CREATE DATABASE [IF NOT EXISTS] database_name CHARACTER SET [=] utf8;
或者一遍直接 CREATE DATABASE mctest; 编码会默认utf8
ALTER DATABASE database_name CHARACTER SET [=] charaset_name;
比如: ALTER DATABASE database_name CHARACTER SET gbk;
查看该数据库的基本信息,比如编码格式:
SHOW CREATE DATABASE database_name;
查看所有数据库信息:
SHOW DATABASES [like 'test%'];
当你在客户端查询数据中文乱码时:
可以采用 set names gbk/utf8(编码格式);的方式来临时让数据显示正常 --->该方式只对客户端显示的数据有影响,对数据库本身没影响
set password=密码可以来修改密码
DROP DATABASE [IF EXISTS] database_name;
使用某数据库:
USE database_name;
查看数据库下的表:
SHOW TABLES FROM database_name [LIKE 'test%'];
展示数据表的列信息
SHOW COLUMNS FROM table_name;
展示数据表的索引信息
SHOW INDEX FROM table_name;
展示表名以head_tablename开头的表状态信息
SHOW TABLE STATUS FROM database_name [LIKE 'test%'[\G]];
可以查看查看所有的数据库的设置
show variables;
也可以查看单个的设置,例如查看数据库的binlog类型
show variables like 'binlog_format';类型大小范围(有符号)范围(无符号)用途TINYINT1 字节(-128,127)(0,255)小整数值SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值MEDIUMINT3 字节(-8 388 608,8 388 607)(0,16 777 215)大整数值INT或INTEGER4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值FLOAT4 字节(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度 浮点数值DOUBLE8 字节(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度 浮点数值DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值 类型大小 (字节)范围格式用途DATE31000-01-01/9999-12-31YYYY-MM-DD日期值TIME3'-838:59:59'/'838:59:59'HH:MM:SS时间值或持续时间YEAR11901/2155YYYY年份值DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值TIMESTAMP41970-01-01 00:00:00/2037 年某时YYYYMMDD HHMMSS混合日期和时间值,时间戳 类型大小用途CHAR0-255字节定长字符串VARCHAR0-65535 字节变长字符串TINYBLOB0-255字节不超过 255 个字符的二进制字符串TINYTEXT0-255字节短文本字符串BLOB0-65 535字节二进制形式的长文本数据TEXT0-65 535字节长文本数据MEDIUMBLOB0-16 777 215字节二进制形式的中等长度文本数据MEDIUMTEXT0-16 777 215字节中等长度文本数据LONGBLOB0-4 294 967 295字节二进制形式的极大文本数据LONGTEXT0-4 294 967 295字节极大文本数据
注:varcha(20) 这个20在MySql5之前代表的是可存储的字节,在MySql5之后代表的是字符长度
UNSIGNED代表无符号 比如:TINYINT UNSIGNED
AUTO_INCREMENT自动编号,默认情况下起始为1,增量为1 (必须与主键组合使用)
MySql的字段唯一约束用: UNIQUE KEY 描述
(primary key, unique key, default, not null,foreign key)-->约束 foreign key在实际开发没用到过,不管
ALTER TABLE table_name ADD [COLUMN] column_name column_definition [FIRST | AFETR column_name];
ALTER TABLE table_name ADD [COLUMN] column_name column_definition,ADD [COLUMN] column_name column_definition,.....;
ALTER TABLE table_name DROP [COLUMN] column_name column_definition [,DROP [COLUMN] column_name column_definition..]
用MODIFY (下面的约束其实也可以用这个来改)修改的时候也可以移动字段的位置
ALTER TABLE table_name change col_name col_name_new column_type;
ALTER TABLE table_name ADD [CONSTRAINT [symbol]] PRIMARY KEY (column_name,...);
ALTER TABLE table_name DROP {primary key | ...} constraint_name;
ALTER TABLE table_name ALTER [column] column_name {set default default_value | drop default};
ALTER TABLE table_name ADD [COLUMN] column_name column_definition,DROP [COLUMN] column_name;
ALTER TABLE table_name RENAME [as|to]table_name_new;
RENAME table table_name to new_table_name [able_name to new_table_name,..];
普通:
insert [into] table_name[(columns)] values(column_values),(column_values)...; values 可以插入多个行记录 into是可以省略的
insert [into] table_name[(columns)] value(column_values); value 代表只能插入一行数据
如果表中有自增主键,table_name后面又不写列名的话,值可以用NULL或DEFAULT来表示自增。
Insert SET: insert [into] table_name set col_name=col_value,col_name=col_value,..;
例如:insert into student set RowId=default,username='test',age=23;
Insert Select:
insert [into] table_name select col_name... from table_name2;
更新语句
update table_name set col_name=col_value,col_name=col_value,..;
删除语句
DELETE FROM table_name [WHERE ...];
查询语句
SELECT *
FROM TABLE_NAME
WHERE ..
GROUP BY ..
HAVING ...
ORDER BY ..
LIMIT ..
HAVING(一般和group by结合使用)
having后面必须是聚合函数(SUM,AVG之类的)或者查询语句中查询出现的字段。
LIMIT
LIMIT num;表示从第一条开始,共num个记录
比如 limit 1;表示取1个记录
LIMIT num1,num2;表示从第num1个之后开始num2个记录,
比如 limit 3,2; 表示第4个和第5个记(即3之后2个记录);
子查询必须出现在圆括号内,外层语句可以是增删改查。
由和子查询的比较运算产生的关键字 ANY SOME ALL
举例:
取出表1的id大于所有表2的id的值
select * from t1 where id > ALL (select id from t2)
!=ALL<>ALL与NOT IN等价
查出一条或多条返回true
查不出返回false
SELECT,多表删除,多表更新也是可以用下面的这些连接的
MySql中JOIN,INNER JOIN,CROSS JOIN是等价的。
多表删除删重复数据时,可以考虑先查出重复的然后和所有的关联,删掉左边的id>右边表的id的数据,就可以只留一个了。
CONCAT() 可以连接两个及以上的数据,所以参数可以有两个及以上
CONCAT('A','-','B') ---> A-B
CONCAT_WS()可以用指定的分隔符分割两个及以上的数据
CONCAT_WS('-','A','B','C') -------> A-B-C
FORMAT()格式化数字的(后面的数代表精确到小数点后几位)
FORMAT(123.456,2)---->123.46
LEFT()取字符串从左边数共几个字符
LEFT('ABCDEFG',3)-------->ABC
SELECT TRIM(' MA C ')--->MA C
SELECT TRIM(LEADING '?' FROM '??MA??TEST????')--->MA??TEST????
SELECT TRIM(TRAILING '?' FROM '??MA??TEST????')--->??MA??TEST
SELECT SUBSTRING('MYSQL',1,2)--->MY
SELECT SUBSTRING('MYSQL',3)--->SQL
SELECT SUBSTRING('MYSQL',-2)--->QL
LIKE
%代表任意个字符
_代表任意一个字符
%%%当希望有的%就是代表字符时,可以这样写 like '%O%%' escape 'O';
NOW() ----> 2017-07-17 20:57:10
CURDATE() ----> 2017-07-17
CURTIME() -----> 20:57:10
DATE_ADD('2017-07-17',INTERVAL 365 DAY) 2018-07-17 还可以是负数,可以是MONTH,YEAR等
DATEDIFF('2017-07-17','2018-07-17') --------> -365
/*****************************************************************************************/
insert [ignore] into ---->在类似主键冲突会出现异常时,用ignore会忽略异常并返回0(代表插入0行)