mysql学习(一)
(1)语句规范:关键字与函数名称全部大写(小写通过但不推荐);数据库名称、表名称、字段名称小写;sql语句必须以分号结束;
SELECT VERSION():查看版本; SELECT NOW():查看当前时间; SELECT USER():查看当前用户;
(2)基本知识:mysql默认端口号:3306;超级用户:root;SET NAMES gbk;
(3)数据类型之整形:TINYINT(1字节) UNSIGNED(无符号,大于0),SMALLINT(2字节),MEDIUMINT(3字节),INT(4字节),BIGINT(8字节);
浮点型:FLOAT[(M,D)]M表示数字总位数,D是小数点后面的位数;DOUBLE[(M,D)];DOUBLE类型表示的范围大得多;
时间类型:YEAR(1字节),TIME(3字节),DATE(3字节,只有年月日),DATETIME(8字节,有年月日时分秒),TIMESTAMP(4字节,时间戳);
浮点类型:CHAR(M):(M个字节,M<=255,定长,不够在后面补空格); VARCHAR(M):(变长,L+1个字节,L<=M,M<=65535),
ENUM(‘value1’,‘value2’):选择一个;SET(‘value1’,‘value2’):进行排列组合;
(4)SELECT DATABASE();查看当前使用的数据库;
(5)SHOW TABLES[FROM database_name]:查看当前数据库的表,SHOW COLUMNS FROM tb_name(查看表结构)或 DESCRIBE tb_name;(这两种方法都不显示行,想看行需要用SELECT)
(6)插入记录:INSERT [INTO] ta_name [(col_name)] VALUES (val,)
(7)AUTO_INCREMENT 默认初始值为1,每次加一,(插入错误也会加1)必须与主键一起使用; UNIQUE KEY 唯一约束,可为空值,一个表可存在多个唯一约束;
(8)默认值:当插入记录时,如果没有明确为字段赋值,则自动赋予默认值;
(9)5种约束:非空约束,主键约束,唯一约束,默认约束,外键约束;
(10)外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同,而字符的长度可以不同;外键列和参照列必须创建索引,如果外键列不存在索引,mysql将自动创建索引(引擎必须为InnoDB)(外键列和参照列列名不一样);
(11)外键约束的参照操作:(ON DELETE 或UPDATE)CASCADE:父表删除或更新时自动删除或更新子表中匹配的行;
父表删除或更新行时设置子表中的外键行为NULL(字表列没有指定NOT NULL),
NO ACTION 或 RESTRICT : 拒绝对父表的删除或更新操作;
(12)表级约束(多个数据列)只能在列定义后声明,列级约束无限制;
(13)添加单列:ALTER TABLE tb_name ADD col_name col_definition [FIRST | AFTER col_name](用逗号分开可同时删除多列或同时删除创建);
(14)添加主键约束(外键和唯一):ALTER TABLE tb_name ADD [CONSTRAINT [name]] PRIMARY KEY [index_type] (col_name1);
添加/删除默认约束:ALTER TABLE tb_name ALTER [COLUMN] col_name {SET DEFAULT num | DROP DEFAULT};
(15)删除主键约束:ALTER TABLE tb_name DROP PRIMARY KEY;
删除唯一和外键约束:ALTER TABLE tb_name DROP FOREIGN KEY key_name(通过 SHOW INDEXES FROM table_name找到约束的名字);
(16)修改列定义:ALTER TABLE tb_name MODIFY col_name column_definition [FIRST | AFTER col_name];
修改列名称与列定义:ALTER TABLE tb_name CHANGE old_col_name new_col_name column_definition [FIRST | AFTER col_name];
数据表更名:ALTER TABLE tb_name RENAME new_tb_name;
(16)插入记录: INSERT tb_name [(col_name,.....)] {VALUES | VALUE} ({expr(表达式) | DEFAULT,.....}),(.........)
INSERT tb_name SET col_name=({expr(表达式) | DEFAULT,.....}),
(17)更新记录: UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name =({expr(表达式) | DEFAULT,.....}) [col_name2......] [WHERE where_contion]
删除记录:DELETE FROM tb_name [WHERE where_contion];
查询的结果分组:[GROUP BY {col_name | position} [ASC | DESC],....] 分组条件:[HAVING where_condition];
对查询结果进行排序:[ORDER BY {col_name | expr | position} [ASC | DESC] , ..............]
限制查询结果返回的数量:[LIMIT [offest(开始的位置,0开头),] row_count(数量)]
(18)子查询(查询嵌套):返回结果很多,可以用 operand ANY(subquery) operand SOME(subquery) operand ALL(subquery) ,还可以用 IN | NOT IN,
如果子查询返回任何行,EXISTS将返回TRUE , 否则为FALSE;
(19)选择插入:INSERT tb_name [(col_name , )] SELECT........
多表参照更新:UPDATE tb_references SET col_name = {expr1 | DEFAULT} [.........] [WHERE where_condition];
(20)字符函数:CONCAT():字符连接 CONCAT_WS():使用指定的分隔符进行字符连接;FORMAT(数字,保留小数点位数)(四舍五入);
LOWER():转小写;UPPER():转大写;LEFT(char(等于字符串),int):取左边;RIGHT():取右边;
LENGTH():字符串长度;LTRIM():去掉前导空格;RTRIM():去掉后导空格;TRIM():去掉前后导空格;
TRIM(LEADING '?' FROM '??KK?K??'):去掉前导字符;TRIM(TRAILNG '?' FROM '??KK?K??'):去掉后导字符;
TRIM(BOTH '?' FROM '??KK?K??'):去掉前导和后导字符;REPLACE(varchar(要进行换操作的字符串),char(被换的),char(换后的));
SUBSTRING(varchar,index(从一开始)(可以有负值),num(要截取的长度)(不写为到末尾));
LIKE '%(一个任意字符)%%' ESCAPE '前面的任意字符':将第二个字符转义; %:任意长度字符; _ : 任意一个字符;
(21)数值运算符与函数:CEIL():向上取整;FLOOR():向下取整;ROUND():四舍五入;
DIV:正数除法;MOD:取余(可对小数进行);POWER():幂运算 TRUNCATE(int,length):截取(参数可为负)
(22)日期时间函数:NOW()当前日期和时间;CURDATE():当前日期;CURTIME()当前时间;
(23)聚合函数(只有一个返回值):AVG(),SUM();
(24)乱码时:改变编码方式:SET NAMES GBK;
(25)用户自定义函数:user-defined function, UDF 是一种对Mysql扩展的途径,其用法与内置函数相同,
结构:CREATE FUNCTION function_name RETURNS {返回类型} 函数体(有 return 语句);函数体如果为复合结构则使用begin .. end 语句;
(26)DILIMITER char; 将以;为结尾改成以char结尾;
(27)mysql不支持全外查询,可以通过union左右查询的结果获得全外查询的结果,union all不查重。

浙公网安备 33010602011771号