DDL\DML

查询字段

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、比较运算符:

DDL\DML_第1张图片

 5、逻辑运算符:and or not

select * from emp where job = 'salesman' and sal > 1500;

存储在表中的数据是一种类型的数据,不同类型的数据应放到不同的表中,否则会使以后的检索和访问很困难。

数据库中的每个表都有一个名字,用来标识自己。此名字是唯一的, 这表示数据库中没有其他表具有相同的名字。

表由一个或多个列组成。每一列存储一列特定的信息,列称为字段,每个列都有相应的数据类型。数据类型定义列可以存储的数据种类。例如,某一列中需要存储数字,该列的数据类型应该定义为数值类型。

数据类型

1、整型

DDL\DML_第2张图片

2、浮点型和定点型

DDL\DML_第3张图片

 3、日期时间类型

DDL\DML_第4张图片

 4、字符型

DDL\DML_第5张图片

DDL(数据定义语言)

Data Definition Language,用于定义和管理数据库中的对象和结构,如表、列、索引等。

创建表

create table [if not exists] 表名(

    字段1 字段类型 [列级约束条件],

    字段2 字段类型 [列级约束条件],

    ...

    [表级约束条件]

);

create table users(

  id int,

  name varchar(20)

);

查看表

1、显示数据库中的表

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...];

DML(数据操作语言)

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 值就是没有值或缺值,非空就是不可以在插入时不给出该列的值,该列必须有值。

  1. 创建表时设置非空约束

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("李四");

  1. 已有字段添加非空约束

alter table 表名

modify column 字段名 字段类型 not null;

  1. 删除非空约束(修改为允许为空)

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),因此多个空值不违反唯一约束。

  1. 列级

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);

  1. 表级,可以给约束起名,可以创建多列的唯一约束(联合唯一约束)

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);

  1. 已有字段添加唯一约束

alter table 表名

modify 字段名 字段类型 unique ;

alter table 表名

add [constraint 约束名] unique(字段名) ;

  1. 删除唯一约束

alter table 表名

drop index 约束名;

alter table 表名

drop key 约束名;

主键约束

       唯一标识表中每行的这个列(或这组列)称为主键。主键用来表示一个特定的行。没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只涉及相关的行。

因此:

  1. 每一个表都应该定义主键
  2. 主键的值不应该修改
  3. 不使用可能会修改值的列作为主键(与业务无关,通常使用 id 作为主键)

特点:

  1. 唯一性:主键要求每一行数据的主键值都必须是唯一的,不允许有重复值。
  2. 非空性:主键要求主键列的值不能为空,即不能为 NULL。
  3. 单一性:每个表只能有一个主键。主键可以由一个列或多个列组成,形成复合主键
  4. 列级

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);

  1. 表级,可以给约束起名,可以创建多列的联合主键

create table 表名(

    字段1 字段类型,

    字段2 字段类型,

    ...

    [constraint 约束名] primary key(字段1[, 字段2, ...])

);

  1. 删除主键

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("赵六");

外键约束

外键为表中的某一字段,该字段是另一表的主键值,外键用来在两个表的数据之间建立联结,一个表中可以有一个或多个外键。外键的作用是保持数据的一致性、完整性。

注意:

  1. 外键字段可以为null,外键为空的数据也叫孤儿数据
  2. 有了外键引用之后,表分为父表和子表
    • 创建表时先创建父表,再创建子表
    • 插入数据时,先插入父表数据,再插入子表数据
    • 删除时先删除子表,再删除父表
  3. 子表外键类型要与父表外键类型一致

在子表创建外键:

[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;

你可能感兴趣的:(数据库MySQL知识储备,sql,数据库,mysql)