1、查询指定字段
select 字段1, 字段2 ,...] from 表名; select ename, sal from emp; select ename from emp; |
2、查询全部字段
select * from 表名; select * from emp; |
条件查询
使用 where 语句,放在 from 后
select * from emp where 条件; select * from emp where empno>7500; |
3、算术运算符:+ - * / %
# 员工年工资 select * from emp where sal * 12 > 20000; |
4、比较运算符:
5、逻辑运算符:and or not
select * from emp where job = 'salesman' and sal > 1500;
存储在表中的数据是一种类型的数据,不同类型的数据应放到不同的表中,否则会使以后的检索和访问很困难。
数据库中的每个表都有一个名字,用来标识自己。此名字是唯一的, 这表示数据库中没有其他表具有相同的名字。
表由一个或多个列组成。每一列存储一列特定的信息,列称为字段,每个列都有相应的数据类型。数据类型定义列可以存储的数据种类。例如,某一列中需要存储数字,该列的数据类型应该定义为数值类型。
1、整型
2、浮点型和定点型
3、日期时间类型
4、字符型
Data Definition Language,用于定义和管理数据库中的对象和结构,如表、列、索引等。
create table [if not exists] 表名( 字段1 字段类型 [列级约束条件], 字段2 字段类型 [列级约束条件], ... [表级约束条件] ); |
create table users( id int, name varchar(20) ); |
show tables; |
2、查看表的基本结构
desc 表名; desc users; |
3、查看数据库/表的创建语句
show create database 数据库名; show create table 表名; |
理想状态下,当表中存储数据以后,该表就不应该再被更新。在表的设计过程中需要花费大量时间来考虑,以便后期不对该表进行大的改动。
1、添加字段
alter table 表名 add column 新列名 数据类型 [约束条件] [first | after 列名]; |
2、修改字段的类型
alter table 表名 modify column 列名 数据类型 [约束条件]; |
3、修改字段的位置
alter table 表名 modify column 列名 数据类型 first | after 列名; |
4、修改字段名
alter table 表名 change column 旧列名 新列名 数据类型 ; |
5、删除字段
alter table 表名 drop column 列名 |
alter table 旧表名 rename to 新表名; |
drop table [if exists] 表1[, 表2, 表3...]; |
Data Manipulation Language,用于操作数据库中的实际数据,如插入、更新、删除和查询数据。
插入完整的行,所有字段,每一个字段都必须提供一个值,如果某个字段没有值,应该使用 NULL,每个字段必须以他们在表中定义的顺序给出。这种语法简单,但是不安全,应该避免使用。
insert into 表名 values ( 字段1的值, 字段2的值, ... ); |
更安全的方法是,在表名后的括号中给出字段名,values 中的值的顺序与前面给出的字段的顺序相同,一一对应。不需要与表中定义的顺序相同,没有值的字段可以不提供。
insert into 表名 ( 字段1, 字段2, ... ) values ( 字段1的值, 字段2的值, ... ); |
values 后面可以跟多个括号,括号间用逗号分隔,每个括号代表要插入的一条数据。
单条 insert 语句插入多条数据比多条 insert 语句快。
update 表名 set 字段1 = 字段1的值, 字段2 = 字段2的值, ... where 限制条件; |
记得加 where 限制条件,否则更新整个表中的每一条数据。
delete from 表名 where 限制条件; |
同样,不加限制条件会删除整个表中每一条数据。
物理删除,无法恢复。
注意:在对 update 或 delete 使用 where 前,应该先用 select 语句进行测试,保证它的过滤结果是正确的。
constraint
约束类型 |
非空约束 |
默认约束 |
唯一约束 |
主键约束 |
外键约束 |
关键字 |
not null |
default |
unique |
primary key |
foreign key |
NOT NULL,是否不可以为空(NULL),NULL 值就是没有值或缺值,非空就是不可以在插入时不给出该列的值,该列必须有值。
create table 表名( 字段名 字段类型 not null, ... ); |
drop table if exists users; create table users( id int not null, name varchar(20) ); # 报错,id没有默认值,不允许为空 insert into users(name) values("李四"); |
alter table 表名 modify column 字段名 字段类型 not null; |
alter table 表名 modify column 字段名 字段类型; |
注意:不要混淆 NULL 值和空串,NULL值是没有值,空串是 ''(两个单引号,中间没有字符)
DEFAULT,如果在插入行时没有给出值,通过 DEFAULT 指定此时使用的默认值。
create table 表名( 字段名 字段类型 default 默认值, ... ); |
drop table if exists users; create table users( id int not null default 666, name varchar(20) ); # 不报错 insert into users(name) values("李四"); select * from users; |
用于确保特定列或列组合的唯一性,被约束的列的值在整个表中是唯一的,唯一约束默认允许空值(null),因此多个空值不违反唯一约束。
create table 表名( 字段名 字段类型 unique, ... ); |
drop table if exists users; create table users( id int not null default 666, name varchar(20) unique ); insert into users(id, name) values(1, "李四"); insert into users(id, name) values(2, "李四"); insert into users(id) values(3); insert into users(id) values(4); |
create table 表名( 字段1 字段类型, 字段2 字段类型, ... [constraint 约束名] unique(字段1[, 字段2, ...]) ); |
drop table if exists users; create table users( id int not null default 666, name varchar(20), unique(id, name) ); insert into users(id, name) values(1, "李四"); insert into users(id, name) values(2, "李四"); insert into users(id, name) values(1, "张三"); insert into users(id, name) values(1, "李四");#报错 insert into users(name) values("李四"); insert into users(name) values("李四");#报错 insert into users(id) values(5); insert into users(id) values(5); |
alter table 表名 modify 字段名 字段类型 unique ; alter table 表名 add [constraint 约束名] unique(字段名) ; |
alter table 表名 drop index 约束名; alter table 表名 drop key 约束名; |
唯一标识表中每行的这个列(或这组列)称为主键。主键用来表示一个特定的行。没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只涉及相关的行。
因此:
特点:
create table 表名( 字段名 字段类型 primary key, ... ); |
drop table if exists users; create table users( id int primary key, name varchar(20) unique ); insert into users(id, name) values(1, "张三"); insert into users(id, name) values(1, "李四"); insert into users(name) values("王五"); insert into users(id) values(2); |
create table 表名( 字段1 字段类型, 字段2 字段类型, ... [constraint 约束名] primary key(字段1[, 字段2, ...]) ); |
alter table 表名 drop primary key; |
auto_increment:设置 auto_increment 的列,当每增加一行时自动增量。每个表只允许一个 auto_increment 列。
create table 表名( 字段1 字段类型 auto_increment ); |
drop table if exists users; create table users( id int primary key auto_increment, name varchar(20) unique ); insert into users(name) values("李四"); insert into users(name) values("张三"); insert into users(id,name) values(5, "王五"); insert into users(name) values("赵六"); |
外键为表中的某一字段,该字段是另一表的主键值,外键用来在两个表的数据之间建立联结,一个表中可以有一个或多个外键。外键的作用是保持数据的一致性、完整性。
注意:
在子表创建外键:
[constraint 外键名] foreign key (列名) references 主表名(主键); create table student( id int primary key auto_increment, name varchar(20) unique ); create table score( id int primary key auto_increment, student_id int , degree int, constraint fk1 foreign key (student_id) references student(id) ); insert into score(student_id, degree) values(1, 90);#报错 insert into student(name) values("李四"); insert into score(student_id, degree) values(1, 90); insert into score(degree) values(90); delete from student where id=1;#报错 delete from score where student_id=1; delete from student where id=1; |