SQL基础
SQL分类
DDL(Data Definition Languages)语句:
数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引、等数据库对象。常用语句关键字包括create、drop、alter等。
DML(Data Manipulation Languages)语句:
数据操控语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用的语句关键字包括insert、delete、update和setect等。
DCL(Data Control languages)语句:
数据控制语句,用于控制不同数据段直接的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要语句关键字包括grant、revoke等。
DDL语句
1. 创建数据库
CREATE DATABASE dbname
选择要操作的数据库
USE dbname
查看数据库中创建的所有数据表
SHOW tables
2. 删除数据库
drop database dbname
3. 创建表
CREATE TABLE tablename(
column_name1 column_type_1 constraints,
column_name2 column_type_2 constraints,
···
column_namen column_type_n constraints)
查看表定义
DESC tablename; or\G
4. 删除表
DROP TABLE tablename
5. 修改表
修改表类型
ALTER TABLE tablename MODIFY[COLUMN]column_defintion[FIRST|AFTER col_name]
例:alter table emp modify ename varchar(20)
增加表字段
ALTER TABLE tablename ADD[COLUMN] column_definition [FIRST|AFTER col_name]
例:alter table emp add column age int(3);
删除表字段
ALTER TABLE tablename DROP [COLUMN] col_name
字段改名
ALTER TABLE tablename CHANGE [COLUMN] old_col_name coumn_definition [FIRST|AFTER col_name]
例:alter table emp change age age1 int(4);
change和modify都可以修改表的定义,不同的是change后面需要写两次列名,不方便。但是change的优点是可以修改列名称,modify则不能。
修改字段排列顺序
例:将新增字段birth date加载ename之后
alter table emp add birth date after ename;
修改字段age,将它放在最前面
alter table emp modify age int(3) first;
修改表名
ALTER TABLE tablename RENAME [TO] new_tablename
例:alter table emp rename emp1
DML语句
1. 插入记录
INSERT INTO tablename(field1,field2,···fieldn)VALUES(value1,value2,···,valuen);
例:insert into emp (ename,hiredate,sal,deptno)values('zzx1','2000-01-01','2000','1');
也可以不指定字段名称,但是后面value要对应好字段。如果只插入其中几个字段,没写的字段自动加NULL、默认值、自增下一个数字等。
也可以一次性插入多条记录
INSERT INTO tablename(field1,field2,····fieldn)
VALUES(record1_value1,record1_value2,···record1_valuen,
record2_value1,record2_value2,···record2_valuen,
···
recordn_value1,recordn_value2,···recordn_valuen)
;
2. 更新记录
UPDATE tablename SET field1=value1,field2=value2,···fieldn=valuen[WHERE CONDITION]
例:将表emp中ename为'lisa'的薪水(sal)从3000涨到4000
update emp set sal=4000 where ename='lisa';
使用update命令同时更新多个表中数据
UPDATE t1,t2,···,tn set t1.field1=expr1,tn.field=exprn [WHERE CONDITION]
常用函数
1.字符串函数
MySQL常用字符串函数
CONCAT(S1,S1,...Sn) 连接S1....为一个字符串
INSERT(str,x,y,instr) 将字符串str从x位置开始,y个字符长的子串替换为字符串instr
LOWER(str) 将字符串str中的所有字符变为小写
UPPER(str) ...大写...
LEFT(str,x) 返回字符串str最左边的x个字符
RIGHT(str,x) ...右边...
LPAD(str,n,pad) 用字符串pad对str最左边进行填充,知道长度为n个字符长度。
RPAD(str,n,pad) ...右边...
LTRIM(str) 去掉字符串str左侧的空格
RTRIM(str) ...右侧...
TRIM(str) 去掉字符串行尾和行头的空格
REPEAT(str,x) 返回str重复x次的结果
REPLACE(str,a,b) 用字符串b替换字符串str中所出现的字符串a
STRCMP(s1,s2) 比较字符串s1和s2
SUBSTRING(str,x,y) 返回从字符串str x位置起y个字符串长度的字串
2.数值函数
MySQL中常用数值函数
ABS(x) 返回x的绝对值
CEIL(x) 返回大于x的最小整数值
FLOOR(x) 返回小于X的最大整数值
MOD(x,y) 返回x/y的模 #求余数
RAND() 返回0~1的随机值
ROUND(x,y) 返回参数x的四舍五入的有y位小数的值
TRUNCATE(x,y) 返回数字x截断为y位小数的结果
3.日期和时间函数
MySQL中常用日期和时间函数
CURDATE() 返回当期日期
CURTIME() 返回当前时间
NOW() 返回当前的日期和时间
UNIX_TIMESTAME(date) 返回日期date的UNIX时间戳
FROM_UNIXTIME 返回UNIX时间戳的日期值
WEEK(date) 返回日期date为一年中的第几周
YEAR(date) 返回日期date的年份
HOUR(time) 返回time的小时值
MINUTE(time) 返回time的分钟值
MONTHNAME(date) 返回date的月份
DATE_FORMAT(date,fmt) 返回按字符串fmt格式化日期date值
DATE_ADD(date,INTERVAL expr type) 返回一个日期或时间值加上一个时间间隔的时间值
DATEDIFF(expr,expr2) 返回起始时间expr和结束时间expe2之间的天数