sql函数
基本sql语句(增,删,改,查)
库操作:
> show databases; #列出所有的库
> create database db1; #创建库
> show create database db2; #查看所创建库的属性
> use db1; #切换库
> drop database db2; #删除库
表操作:
> show tables; #列出当前库中所有的表
> create table t1 (id int(10),name char(10)); #创建表,至少要有一个字段,多个字段用","隔开
> desc t1; #查看表结构
> show create table t10\G #查看表的创建属性
> alter table t1 rename to t10; #修改表名
> alte r table t1 add sex char(10); #添加字段在末位
> alter table t1 add QQ int after name; #添加字段在指定字段的后面
> alter table t1 add uid int first; #添加字段在首位
> alter table t1 drop uid; #删除字段
> alter table t1 change id uid int; #修改字段的名称及属性
> alter table t1 modify uid int(10); #修改字段的属性
> truncate stu_info; # 清空表
> drop table t2; #删除表
记录操作:
> insert into t1 set uid=1,name='tom',sex='male'; #添加一条记录
> insert into t1 (uid,name,sex) values (2,'jim','male');
> insert into t1 (uid,name,sex) values (3,'lilei','male'),('4','lily','female'); #添加多条记录
> insert into t1 values (5,'lucy',123,'female'); #注意:列数和值数一定要一样
> update t1 set name='hanmeimei' where uid=6; #修改记录,注意定位
> update t1 set uid=6 where name='lucy' and QQ is null; #多条件定位 and ↔ && or ↔ || not ↔ !
> delete from t1 where uid=6; #删除记录,注意定位
单表查询:
> select * from t1; #查询表中所有字段的所有记录.如果显示很乱,用\G结尾
> select name,qq from t1; #查询部分字段的所有记录
> select name,chinese from t2 where chinese >= 80; #查询部分字段的部分记录
> select name,chinese,english from t2 where chinese >= 80 and english = 100; #多条件定位
> select 姓名,语文 from score where 语文 between 61 and 79; # 相当于 语文 >= 61 and 语文 <= 79
> select 姓名,籍贯 from info where 籍贯 in(‘广东’,‘广西’); # 用in代替or
> select * from t2 order by chinese; #以指定字段值升序排列
> select * from t2 order by chinese desc; #desc: 逆序
> select * from t2 order by chinese desc limit 2; #只显示前几条记录
> select * from t2 where english=(select max(english) from t2); #子查询
> select * from t2 where name like ‘t%’; #like通配符 %: 所有 _: 任意单个字符 蓝色为查询关键词
> select * from t2 where name regexp '^t'; #regexp正则表达式
> select name,chinese+math+english as total from t2; #as别名
> select count(name) from t2; #统计name字段有多少记录, null不会被统计
> select count(1) from t2; #统计有多少条记录
> select sex,count(sex) from t1 group by sex; #统计指定字段中相同的值的个数
多表联合查询:
内连接: 两个表某字段的值完全一样
> select t1.name,t1.sex,t2.math from t1 join t2 on t1.name=t2.name;
> select t1.name,t1.sex,t2.math from t1,t2 where t1.name=t2.name;
外连接: 左,右连接
左: 显示出左表中所有的记录
右: 显示出右表中所有的记录
> select t1.name,t1.sex,t2.math from t1 left join t2 on t1.name=t2.name; #左连接
> select t2.name,t1.sex,t2.math from t1 right join t2 on t1.name=t2.name; #右连接
函数
database() select database(); #查看当前所在的库
user() select user(); #查看当前登陆的用户
password() #给字符串加密,一般用于修改密码
聚合函数
sum() select sum(age) from t1; #显示age字段的和
avg() select avg(age) from t1; #求age字段的平均值
max() select max(age) from t1; #最大值
min() select min(age) from t1; #最小值
count() select sex,count(sex) from t1 group by sex; #统计sex字段每种有多少条记录
select count(*) from pass; 统计表中有多少条非空的记录
时间函数
1.查看当前时间
curtime() #select curtime();
2.查看当前日期
curdate()
3.查看系统时间
now()
sysdate()
其他函数
1.连接函数 concat()
MariaDB [test]> select concat(username,uid) from pass;
MariaDB [test]> select concat(username,' ',uid) from pass;
MariaDB [test]> select concat(username,':',uid) from pass;
MariaDB [test]> select concat(username,':',uid) as 'username-uid' from pass;
2.转换成小写 lower()
MariaDB [test]> update pass set username='ROOT' where username='root';
MariaDB [test]> select lower(username) from pass;
3.转换成大写 upper()
MariaDB [test]> select upper(username) from pass;
4.求长度 length()
MariaDB [test]> select username,length(username) from pass;
其他常用命令
查看服务器运行状态: status
mysql> status;
查看连接数: show processlist;
mysql> show processlist;
查看服务器设置: show variables;
mysql> show variables like 'socket';
运算符
1.算数运算符
2.比较运算符
3.逻辑运算符
1、算数运算符
+ - * / % () power()
MariaDB [test]> select 4*3,3+6,5-2;
+-----+-----+-----+
| 4*3 | 3+6 | 5-2 |
+-----+-----+-----+
| 12 | 9 | 3 |
+-----+-----+-----+
1 row in set (0.00 sec)
mysql> select power(2,10);
+-------------+
| power(2,10) |
+-------------+
| 1024 |
+-------------+
2、比较运算符
< >= <= = != 成立返回1,不成立返回0
MariaDB [test]> select 1>2;
±----+
| 1>2 |
±----+
| 0 |
±----+
1 row in set (0.00 sec)
MariaDB [test]> select 3>2;
+-----+
| 3>2 |
+-----+
| 1 |
+-----+
1 row in set (0.01 sec)
3、逻辑运算符
and or not
and == && or == ||
MariaDB [test]> select not 4<5; #not取反
+---------+
| not 4<5 |
+---------+
| 0 |
+---------+`在这里插入代码片`
1 row in set (0.00 sec)
MariaDB [test]> select 4<5 && 3=3;
±------------+
| 4<5 && 3=3 |
±------------+
| 1 |
±------------+
1 row in set (0.00 sec)
MariaDB [test]> select 4<5 && 3!=3;
±-------------+
| 4<5 && 3!=3 |
±-------------+
| 0 |
±-------------+
1 row in set (0.00 sec)
数据类型
数据类型用来约束你能够存放在数据库中的数据内容
数据类型的分类
1、数值类型
2、字符串类型
3、日期时间类型
4、浮点型
一、数值类型
分类:整型和浮点型
1.整型
存储占的字节数 有符号数范围 无符号数范围
tinyint 1B(8bits) -128~127 0~255(2^8-1)
smallint 2B -32768~32767 0~65535
mediumint 3B -8388608~8388607 0~16777215
int 4B -2147483648~2147483647 0~4294967295
bigint 8B -9223372036854775808~9223372036854775807 0~18446744073709551615
在存储的时候,默认是有符号数的
整型可以指定显示宽度,但是并不影响取值范围。
2.浮点型
float(M,D) M是总长度,D小数的位数 存储空间4B
double(M,D) 存储空间8B ???
MariaDB [test]> create table num(
-> tiny tinyint,
-> small smallint,
-> medium mediumint,
-> nint int,
-> big bigint);
MariaDB [test]> desc num;
+--------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| tiny | tinyint(4) | YES | | NULL | |
| small | smallint(6) | YES | | NULL | |
| medium | mediumint(9) | YES | | NULL | |
| nint | int(11) | YES | | NULL | |
| big | bigint(20) | YES | | NULL | |
+--------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
MariaDB [test]> select * from num;
+------+-------+---------+-----------+-----------+
| tiny | small | medium | nint | big |
+------+-------+---------+-----------+-----------+
| 127 | 32767 | 8388607 | 123456789 | 123456789 |
+------+-------+---------+-----------+-----------+
无符号数例:
MariaDB [test]> create table unnum( tiny tinyint unsigned, small smallint unsigned);
MariaDB [test]> insert into unnum values (123456789,123456789);
MariaDB [test]> select * from unnum;
±-----±------+
| tiny | small |
±-----±------+
| 255 | 65535 |
±-----±------+
zerofill:零填充,补0
id
001
010
100
MariaDB [test]> create table zf (id tinyint zerofill);
MariaDB [test]> insert into zf values (1);
MariaDB [test]> insert into zf values (11);
MariaDB [test]> insert into zf values (111);
MariaDB [test]> select * from zf ;
±-----+
| id |
±-----+
| 001 |
| 011 |
| 111 |
±-----+
二、字符串类型
char 定长字符串 如:char(10) 占用10个字节 括号中的长度范围1~255
varchar 变长字符串 varchar(10) 按照存的字符串的长度分配 括号中的长度范围0~65535
例:存字符A使用varchar会占用2个字节的存储空间
为什么是2字节?
变长字符串需要1个或2个字节存储字符串的长度
values char(4) storage varchar(4) storage
‘’ ’ ’ 4B ‘’ 1B
‘AB’ 'AB ’ 4B ‘AB’ 3B
‘ABCD’ ‘ABCD’ 4B ‘ABCD’ 5B
‘ABCDEF’ ‘ABCD’ 4B ‘ABCD’ 5B
对于char型,存储时候长度不够,默认会在字符串后面补空格,但是查询时,空格会被脱掉。
enum:枚举类型 多个给定值中选择一个 -------------- 单选 set:集合类型 多个给定值中选者一个或多个 -------------- 不定项选择
三、日期时间类型
DATE:日期型 3字节
格式:'YYYY-MM-DD'
TIME:
格式:'HH:MM:SS'
DATETIME
格式:'YYYY-MM-DD HH:MM:SS'
TIMESTAMP
格式:'YYYY-MM-DD HH:MM:SS'
YEAR
格式:'YYYY'
MariaDB [test]> create table time_test(
-> d date,
-> t time,
-> dt datetime,
-> ts timestamp,
-> y year);
Query OK, 0 rows affected (0.04 sec)
MariaDB [test]> insert into time_test values(now(),now(),now(),now(),now());
MariaDB [test]> select * from time_test;
±-----------±---------±--------------------±--------------------±-----+
| d | t | dt | ts | y |
±-----------±---------±--------------------±--------------------±-----+
| 2017-06-01 | 10:17:07 | 2017-06-01 10:17:07 | 2017-06-01 10:17:07 | 2017 |
±-----------±---------±--------------------±--------------------±-----+