Mysql入门语法
1.创建一个新的数据库(以test为例):
create database test;
// 成功返回信息:Query OK, 1 row affected
2.显示当前所有数据库:
show databases;
// 成功返回信息: 数据库表一览 + n(数据库个数) rows in set
3.删除一个数据库(以test为例):
drop database test;
// 成功返回信息: Query OK, 0 rows affected
4.进入指定数据库(以test为例):
use test;
// 成功返回信息: Database changed
5.在当前数据库下建表:
/**
形式: create table 表名称 (
列名称1 数据类型 约束,
列名称2 数据类型 约束,
列名称3 数据类型 约束,
...
)其他表信息...;
*/
//下面是一个最简单的建表语句
create table table_test (
id int(10),
name varchar(30),
regTime date
);
数据类型(data_type)规定了列可容纳何种数据类型,下面是一些常用的数据类型
数据类型 | 描述 |
---|---|
integer(size) int(size) smallint(size) tinyint(size) | 仅容纳整数,在括号内规定数字的最大位数 |
decimal(size,d) numeric(size,d) | 容纳带有小数的数字,”size”规定数字的最大位数。”d”规定小数点右侧的最大位数 |
char(size) | 容纳固定长度的字符串(可容纳字母,数字以及特殊字符)。在括号中规定字符串的长度 |
varchar(size) | 容纳可变长度的字符串(可容纳字母,数字以及特殊字符)。在括号中规定字符串的最大长度 |
date | 容纳日期 |
sql约束:
约束用于限制加入表数据的类型,可以在创建表时规定约束,也可以在创建之后。
- not null:not null 约束强制列不接受null值,not null约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或更新记录
create table persons (
id int not null,
name varchar(30) not null,
birthday date
);
//上面的sql语句强制id和name列不接受null值
- unique: unique约束唯一标识数据库中的每条记录 , unique 和 primary key 约束均为列或列集合提供了唯一性的保证。primary key 拥有自定义的unique约束。注意:每个表可以有多个unique约束,但是只能有一个primary key约束
create table persons (
id int not null,
name varchar(30) not null,
birthday date,
unique(id)
);
//上面的sql语句表明id列的元素可以唯一标识表中的每条记录
create table persons (
id int not null,
name varchar(30) not null,
birthday date,
constant uc_personID unique (id,name)
//多个unique值
);
- primary key: primary key约束唯一标识数据库表中的每条记录,主键必须包含唯一的值,主键列不能包含null值,每个表都应该有一个主键,并且只能有一个主键
create table persons (
id int not null,
name varchar(30) not null,
birthday date,
primary key(id)
);
- foreign key: 一个表中的foreign key指向另一个表中的primary key,foreign key约束用于预防破坏表之间连接的动作。foreign key约束也能防止非法数据插入外键列,因为它必须是指向的那个表中的值之一
//现有table_test表,其中的id列被primary key约束,现在我们创建一个for_test表指向它的id
create table for_test(
address varchar(20),
id int(10),
foreign key (id) references table_test(id)
);
//这里table_test表中的id列是表中的primary key
//for_test表中的id列是表中的foreign key
//此时如果向表中插入记录
insert into for_test (address,id) values ("北京",1001);
// 如果 对应在table_test的id列中存在1001,则插入成功,否则失败
- check:check约束用于限制列中的值的范围,如果对单个列定义check约束,那么该列只允许特定的值,如果对一个表定义check约束,那么此约束会在特定的列中对值进行限制
create table persons (
id int not null,
name varchar(30) not null,
birthday date,
check (id > 0) //id列的元素必须大于0
);
- default : default约束用于向列中插入默认值,如果没有规定其他的值,那么会将默认值添加到所有的新记录
id int not null,
name varchar(30) not null default "保密", //若一条记录中没有插入该列元素,则默认存储该值
birthday date,
primary key(id)
);
6.显示当前数据库下所有表:
show tables;
//成功返回信息: 表名一览 + n(表数目) rows in set
7.描述表各列类型信息与约束(以table_test表为例)
describe table_test;
8. 从表中抽取信息
1>.抽取表中所有信息(以table_test表为例):
select * from table_test;
2>.抽取表中指定列信息(以table_test表为例):
select id,name from table_test;//只抽取出id列和name列信息
3>.条件性地抽取表中信息(以table_test表为例):
语法:SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
select * from table_test where id > 1001; //抽取出表中id>1001的记录
4>.抽取出排序后的表信息:
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
select * from table_test order by id;
9.删除表中某条记录(以table_test表为例):
语法:DELETE FROM 表名称 WHERE 列名称 = 值;
delete from table_test where id = 1012;//删除id为1012的那条记录
10.插入一条记录到表中(以table_test表为例):
语法:INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,….);
insert into table_test (id,name) values (1035,"Young");
//第一个括号中是要新增的记录的列名
//第二个括号中是与第一个括号中相对应的列的实际值
11.修改表中数据(以table_test表为例):
语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;
update table_test set name = "redefine" where id = 1001;
12.删除表(以table_test表为例):
drop table table_test;
13.在表中添加新的一个列
格式:alter table 表名 add 新增列名 列元素类型 约束;
alter table table_test add age int(10);
14.在表中删除一个列
格式:alter table 表明 drop 要删除的列名;
alter table table_test drop age;
15.表内排序
格式: select 列名 from 表名 order by 列名 asc(升序)或desc(降序);
select userId,math from stu_grade order by math desc;
16.count()函数:
格式:
- select count(列名) from 表名;//返回指定列的值的数目(null不计)
- select count(*) from 表名;//返回该表中的记录数
select count(*) from stu_grade;
17.group by
group by 列名 :就是把一张表中该列名中元素相同的记录并在一起,并进行其他操作
- 例如下面这张表
筛选出学号与班级信息,现在如果想统计每个班分别有几个人,就可以使用下面这条语句
select classroom,count(*) from stuifo group by classroom;
结果:
18.now() 函数
说明:返回当前的日期和时间
insert into time_test (regTime) values (now()) ;
19. 数学相关函数
- 1>.avg(): AVG函数返回数值列的平均值。NULL 值不包括在计算中。
- 2>.max(): MAX 函数返回一列中的最大值。NULL 值不包括在计算中。
- 3>.min(): MIN 函数返回一列中的最小值。NULL 值不包括在计算中。
- 4>.sum(): SUM 函数返回数值列的总数(总额)。
- 5>.round():ROUND 函数用于把数值字段舍入为指定的小数位数。
20 increment
说明:Auto-increment 会在新记录插入表中时生成一个唯一的数字。
CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
);
若要指定序列的起始值,可以在建表时说明。例如:
CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
) auto_increment = 100;
或者在建表之后:
ALTER TABLE Persons AUTO_INCREMENT=100;
21.数据类型:
文本类型
数字类型
日期/时间类型