sql是用于访问和处理数据的标准的计算机语言。

DML:增删改查 DCL:控制语言,用户 权限 事务 DDL:数据定义语言 管理逻辑库 数据表 视图 索引

创建逻辑库:

mysql>create database 逻辑库名称;
mysql>show databases; 显示数据库
mysql>drop database 逻辑库名称;删除某一个数据库

创建数据表:

CREATE TABLE 数据表(
列名1 数据类型【约束】【COMMENT 注释】,
列名2 数据类型【约束】【COMMENT 注释】,
……
)【COMMENT 注释】

mysql增删改查语句大全

登录数据库
mysql -hlocalhost -uroot -p;
#修改密码
mysqladmin -uroot -pold password new;

显示数据库
show databases;
#显示数据表
show tables;
#选择数据库
use examples;
#创建数据库并设置编码utf-8 多语言
create database examples default character set utf8 collate utf8general_ci;
#删除数据库
drop database examples;
#创建表
create table test(
id int(10) unsigned zerofill not null auto_increment,
email varchar(40) not null,
ip varchar(15) not null,
state int(10) not null default ‘-1’,
primary key (id)
)engine=InnoDB;
#显示表结构
describe
#删除表
drop table test;
#重命名表
alter table test_old rename test_new;
#添加列
alter table test add cn int(4) not null;
#修改列
alter table test change id id1 varchar(10) not null;
#删除列
alter table test drop cn;
#创建索引
alter table test add index (cn,id);
#删除索引
alter table test drop index cn
#插入数据
insert into test (id,email,ip,state) values(2,’qq@qq.com’,’127.0.0.1’,’0’);
#删除数据
delete from test where id = 1;
#修改数据
update test set id=’1’,email=’q@qq.com’ where id=1;
#查数据
select from test; #取所有数据
select
from test limit 0,2; #取前两条数据
select * from test email like ‘%qq%’ #查含有qq字符
表示一个 %表示多个
select from test order by id asc;#降序desc
select
from test id not in(‘2’,’3’);#id不含2,3或者去掉not表示含有
select * from test timer between 1 and 10;#数据在1,10之间

—————————————-表连接知识———————————————
#等值连接又叫内链接 inner join 只返回两个表中连接字段相等的行
select from A inner join B on A.id = B.id; #写法1
select
from A,B where A.id = B.id; #写法2
select a.id,a.title from A a inner join B b on a.id=b.id and a.id=1;#写法3 表的临时名称
select a.id as ID,a.title as 标题 from A inner join B on A.id=B.id;#添加as字句

左连接又叫外连接 left join 返回左表中所有记录和右表中连接字段相等的记录
select * from A left join B on A.id = B.id;

select * from A left join (B,C,D) on (B.i1=A.i1 and C.i2=A.i2 and D.i3 = A.i3);#复杂连接

右连接又叫外连接 right join 返回右表中所有记录和左表中连接字段相等的记录
select * from A right join B on A.id = B.id;

完整外部链接 full join 返回左右表中所有数据
select * from A full join B on A.id = B.id;

交叉连接 没有where字句 返回卡迪尔积
select * from A cross join B;
————————————-表连接结束——————————————————————————————
————————-索引创建————————————————————————
show index from A #查看索引
alter table A add primary key(id) #主键索引
alter table A add unique(name) #唯一索引
alter table A add index name(name) #普通索引
alter table A add fulltext(name) #全文索引
alter table A add index name(id,name) #多列索引

常用函数
abs(-1)#绝对值
pi()#pi值
sqrt(2)#平方根
mod(-5,3)#取余-2
ceil(10.6)#进位+1 结果11 ceil(10.0)结果10
floor(10.6)#取整 10
round(2.5)#四舍五入到整数 结果3
round(2.5,2)#保留两位小数 结果2.50
truncate(2.5234,3)#取小数后3位不四舍五入 2.523
sign(-2);#符号函数 返回-1 0还是0 正数返回1
pow(2,3),exp(2);#2的3次幂 或e的2次幂
log(2),log10(2);#求对数
radians(180),degrees(0.618);#角度弧度转换
sin(0.5),asin(0.5)#正弦和反正弦 类似cos acos tan atan
length(‘hi’)#计算字符长度
concat(‘1’,1,’hi’)#合并字符串
insert(‘12345’,1,0,’7890’);#从开头第1个字符开始到0个结束,替换成后边字符串,0表示在最前边插入
ucase(‘a’),lcase(‘A’)#转成大写和小写
left(‘abcd’,2),right(‘abcd’,2);#返回前两个字符和后两个字符
ltrim(‘ 0 ‘),rtrim(‘ 0 ‘),trim(‘ 0 ‘)#删除空格
replace(‘1234567890’,’345678’,’0’);#替换输出12090
substring(‘12345’,1,2)#取字符 输出12 1是位置 2是长度
instr(‘1234’,’234’);#取得234位置是2
reverse(‘1234’);#反序输出4321
current()#返回日期
curtime()#返回时间
now()#返回日期时间
month(now())#当前月份 monthname 英文月份
dayname(now())#星期英文 dayofweek()1是星期天 weekday()1是星期二
week(now())#本年第多少周
dayofyear(now()),dayofmonth(now())#今天是本年第多少天 今天是本月第多少天
year(now()),month(now()),day(now()),hour(now()),minute(now()),second(now())#返回年月日 时分秒
time_to_sec(now()),sec_to_time(3600*8);#转换时间为秒和还原
version()#mysql版本
database()#当前连接的数据库 没有为null
user()#获取用户名
md5(‘a’)#加密字符串
ascii(‘a’)#ascii值97
bin(100),hex(100),oct(100)#返回二进制 十六进制 八进制
conv(10001,2,8);#各种进制相互转换
rand()#生成0到1之间随机数
sleep(0.02)#暂停秒数
————————————————-

  1. MySQL 为日期增加一个时间间隔:date_add()
    set @dt = now();
    select date_add(@dt, interval 1 day); - 加1天
    select date_add(@dt, interval 1 hour); -加1小时
    select date_add(@dt, interval 1 minute); - 加1分钟
    select date_add(@dt, interval 1 second); -加1秒
    select date_add(@dt, interval 1 microsecond);-加1毫秒
    select date_add(@dt, interval 1 week);-加1周
    select date_add(@dt, interval 1 month);-加1月
    select date_add(@dt, interval 1 quarter);-加1季
    select date_add(@dt, interval 1 year);-加1年
    MySQL adddate(), addtime()函数,可以用date_add() 来替代。下面是date_add() 实现addtime() 功能示例:
    mysql> set @dt = ‘2009-09-09 12:12:33’;
    mysql>
    mysql> select date_add(@dt, interval ‘01:15:30’ hour_second);-加上1小时15分30秒
    date_add(@dt, interval ‘01:15:30’ hour_second)

    结果:2009-09-09 13:28:03

    mysql> select date_add(@dt, interval ‘1 01:15:30’ day_second);-加1天1小时15分30秒
    date_add(@dt, interval ‘1 01:15:30’ day_second)
    2008-08-10 13:28:03
    date_add() 函数,分别为@dt 增加了“1小时15分30秒” 和 “1天1小时15分30秒”
    2. MySQL 为日期减去一个时间间隔:date_sub()
    mysql> select date_sub(‘1998-01-01 00:00:00’, interval ‘1 1:1:1’ day_second);
    date_sub(‘1998-01-01 00:00:00’, interval ‘1 1:1:1’ day_second)
    www.2cto.com
    MySQL date_sub() 日期时间函数 和date_add() 用法一致,不再赘述。另外,MySQL 中还有两个函数subdate(), subtime(),建议,用date_sub() 来替代。
    3. MySQL 另类日期函数:period_add(P,N), period_diff(P1,P2)
    函数参数“P” 的格式为“YYYYMM” 或者 “YYMM”,第二个参数“N” 表示增加或减去N month(月)。
    MySQL period_add(P,N):日期加/减去N月。
    mysql> select period_add(200808,2), period_add(20080808,-2)
    | period_add(200808,2) | period_add(20080808,-2) |
    结果| 200810 | 20080806 |
    MySQL period_diff(P1,P2):日期P1-P2,返回N 个月。
    mysql> select period_diff(200808, 200801);
    period_diff(200808, 200801)
    结果:7
    MySQL 中,这两个日期函数,一般情况下很少用到。
    4. MySQL 日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)
    MySQL datediff(date1,date2):两个日期相减date1 date2,返回天数。网站制作学习网整理
    select datediff(‘2008-08-08’, ‘2008-08-01’); - 7
    select datediff(‘2008-08-01’, ‘2008-08-08’); -7
    MySQL timediff(time1,time2):两个日期相减time1 time2,返回time 差值。
    select timediff(‘2008-08-08 08:08:08’, ‘2008-08-08 00:00:00’);- 08:08:08
    select timediff(‘08:08:08’, ‘00:00:00’); - 08:08:08
    注意:timediff(time1,time2) 函数的两个参数类型必须相同。