数据库-使用终端操作数据库

70 阅读10分钟

数据库-使用终端操作数据库

B站视频学习

查询数据库服务器中所有的数据库

show databases;

选中某一个数据库进行操作

use [databasesName];

SQL语句,查询数据库中某一个表的数据,必须上一语句选中某一个数据库才可以

select * from [tableName];

接上一步,对于表的具体某个信息也可以查询

select * from [tableNames] where [表中某一个字段]=[该字段的值];

如何退出数据库服务器?

exit;

如何在数据库服务器中创建自己的数据库?

create database [数据库名称];

如何查看某个数据库中所有的数据表,需要先用use语句选中这个数据库

show tables;

如何创建一个数据表? 创建一个名为pet表的数据表,name叫做数据字段,后面的叫做数据类型,此时数据表里是空的,这些只是定义数据表中的数据的每个数据字段以及对应数据类型的格式

create table [数据表名](各个字段以及对应数据类型的格式);
create table pet(name VARCHAR(20),owner VARCHAR(20),specise VARCHAR(20),gender CHAR(1),brith DATE,death DATE );

注意事项: 1:VAR()与VARCHAR()的区别在于VAR()是定常的,哪怕存储的字符串没有达到"()"中数字的上限,VAR()依然会占用空格来填充空间.而VARCHAR()则是不定长的,没有达到"()"中的上限则会自动去掉后面的空格; 2:性别不要用:sex 要用:gender 一个是性 一个是性别; 3:定义最后一个字段的时候不要加","; 4:上面的"VAR","VARCHAR","DATE"可以用小写.不过最好用大写来表示区分关键字,若不然也许写到后面你自己都不知道这个词是数据库中的关键字还是你自己自定义的一些数据,同时一定要用英文的标点符号也必须半角输入

查看创建好的数据表具体的结构和数据

describe [数据表名]; //例如describe pet;
还可以直接简写为desc [数据表名];
说明:
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
Field    :    字段的名称
Type     :    字段的类型,可以有int    var    varchar    
Key      :    是否是关键字 如可以定义为:  primary key 或者 unique key 
Default: :    若是该字段没有主动设置值的时候,该字段的默认值是什么?

如何查看数据表中的记录?

select * from [数据表名]; //上面提到过,此时显示是空的Empty,例如select * from pet;

数据表中如何插入数据?

insert into [数据表名] values(每个字段的各个值);
例如:
insert into pet values('kk','cc','dog','1','1998-8-2',null);
+------+-------+---------+------+------------+-------+
| name | owner | specise | sex     | brith | death |
+------+-------+---------+------+------------+-------+
| kk    | cc  | dog   | 1   | 1998-08-02 | NULL|
+------+-------+---------+------+------------+-------+

注意: NULL:代表的是空,表示该字段还没有数据.千万不要主动填写'NULL',这代表你的字段有一个值叫做'null',看好一个不是字符串,另一个是字符串 其实还有一种写法:

insert into [数据表名](字段1,字段2) values (字段1的值,字段2的值);
例如:
insert into pet(name,owner) values ('xx','cc');
代表我只在name和owner字段上面插入的一条,其他皆为NULL/默认值的数据

mysql 常用数据类型,大致分为三类:数值、日期/时间、字符串(字符)类型

数值:TINYINT、SMALLINT、MEDIUMINT、INT或INTEGER、BIGINT、FLOAT、DOUBLE、DECIMAL

每个都是有范围的

日期/时间:DATE、TIME、YEAR、DATETIME、TIMESTAMP 按照不同的格式选择

字符串类型:CHAR、VARCHAR等,也是有范围的

注意:金钱最好用int/bigint(整数,单位用分,拿出来进行*100换成元),千万不要直接用浮点,会有精度损失.

删除语句:

delete from [tablesName] where [其中一个字段]=[该字段的值];

修改数据:

update [tableName] set 字段1=值1,字段2=值2 ... where [其他的一个字段]=[该字段值];
字段1=值1,字段2=值2 ...为修改的值

mysql建表中的约束

1主键约束:

它能够唯一确定一张表中的一条记录,增加主键约束之后,就可以使得字段不重复而且不为空NULL

例如:
create table user(
    id int PRIMARY KEY,
    name VARCHAR(20)
);
insert into user values (1,'张三');
+----+------+
| id | name |
+----+------+
|  1 | 张三 |
+----+------+
运行describe user;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
插入数据时若为重复的id会报错,而且id是不可以为null 

联合主键/复合主键:

只要联合的主键值全都不重复就可以,相当于或,但是值不能为空NULL

例如:
create user user2 (id int,name varchar(20), password varchar(20), PRIMARY KEY(id, name));
describe user2;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | NO   | PRI | NULL    |       |
| name     | varchar(20) | NO   | PRI | NULL    |       |
| password | varchar(20) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
INSERT INTO user2 VALUES (1,'老王','123456');
INSERT INTO user2 VALUES (2,'老王','123456');
+----+------+----------+
| id | name | password |
+----+------+----------+
|  1 | 老王 | 123456   |
|  2 | 老王 | 123456   |
+----+------+----------+
场景:表中有班级号以及学生座位号,我们可以用班级号+学生的座位号可以准确的定位一个学生,如:(15号可以准确的确定一个学生)

建表后的添加、删除和修改

 create table user4(name varchar(20), owner varchar(20));
 show tables;
+----------------+
| Tables_in_user |
+----------------+
| user           |
| user2          |
| user3          |
| user4          |
+----------------+
desc user4;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | YES  |     | NULL    |       |
| owner | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
alter table user4 add primary key(name); //添加
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | NO   | PRI | NULL    |       |
| owner | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
alter table user4 drop primary key; //删除
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | NO   |     | NULL    |       |
| owner | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
alter table user4 modify name int primary key; //修改
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | int         | NO   | PRI | NULL    |       |
| owner | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

2自增约束:

像id等一些值没有设置,可以自增长

例如:
create table user3 (id int PRIMARY KEY AUTO_INCREMENT, name varchar(20));
describe user3;
 +-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
insert into user3 (name) values ('张三');
insert into user3 (name) values ('李四');
select * from user3;
+----+------+
| id | name |
+----+------+
|  1 | 张三 |
|  2 | 李四 |
+----+------+

3唯一约束

约束修饰的字段值不可以重复

 creat table user5(id int, name varchar(20));
 desc user5;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(20) | YES  | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
 **新增name为唯一约束
 alter table user5 add unique(name);
 insert into user5 values(1, "zhangsan");
 insert into user5 values(1, "zhangsan"); //第二次报错,name只能唯一
 insert into user5 values(2, "zhangsan"); //第二次报错,name只能唯一
 
 **也可以在定义时添加
 creat table user6(id int, name varchar(20), unique(name));
 desc user6;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(20) | YES  | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
**或者还可以这样写
create table user7(id int, name varchar(20) unique);
desc user7;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(20) | YES  | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
**还可以添加多个字段的唯一约束,此时NUI变为MUL,但是这样写是说这几个字段全部不重复就OK,也是相当于或操作
create table user8(id int, name varchar(20), unique(id, name));
desc user8;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  | MUL | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

**如何删除唯一约束
alter table user7 drop index name;
desc user7;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

**也可以用modify添加
alter table user7 modify name varchar(20) unique;
desc user7;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(20) | YES  | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+

**场景:业务需求:设计一张用户注册表,用户姓名必须要用手机号来注册,而且手机号和用户名称都不能为空,那么:
CREATE TABLE user_test(
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT'主键id',
    name VARCHAR(20) NOT NULL COMMENT'用户姓名,不能为空',
    phone_number VARCHAR(20) UNIQUE NOT NULL COMMENT'用户手机,不能重复且不能为空'
);
运行 DESCRIBE user_test;
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int(11)     | NO   | PRI | NULL    | auto_increment |
| name         | varchar(20) | NO   |     | NULL    |                |
| phone_number | int(11)     | NO   | UNI | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
这样的话就达到了每一个手机号都只能出现一次,达到了每个手机号只能被注册一次.
用户姓名可以重复,但是手机号码却不能重复,复合正常的逻辑需求

4非空约束

create table user9(id int, name varchar(20) not null);
desc user9;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(20) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
insert into user9(id) values(1); //只添加id的值,不添加name的值,会报错
ERROR 1364 (HY000): Field 'name' doesn't have a default value
insert into user9 values(1, '张三');
desc user9;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(20) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
insert into user9 (name) values('lisi'); //只传name值也可以
select * from user9;
+------+------+
| id   | name |
+------+------+
|    1 | 张三 |
| NULL | lisi |
+------+------+
alter ... add...
alter ... modify...这俩也都可以使用

5默认约束

当插入字段值的时候没有传值,就使用默认值

create table user10 (id int, name varchar(20), age int default 10);
desc user10;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| age   | int         | YES  |     | 10      |       |
+-------+-------------+------+-----+---------+-------+
insert into user10 (id, name) values (1, 'zhangsan');
select * from user10;
+------+----------+------+
| id   | name     | age  |
+------+----------+------+
|    1 | zhangsan |   10 |
+------+----------+------+
insert into user10 values (1, 'zhangsan', 19); //传入了值就不会使用默认值了
 select * from user10;
+------+----------+------+
| id   | name     | age  |
+------+----------+------+
|    1 | zhangsan |   10 |
|    1 | zhangsan |   19 |
+------+----------+------+
同样
alter...add...
alter...modify...也可以使用

6外键约束

涉及到两个表:父表(主表)、子表(副表)

 create table classes(id int primary key, name varchar(20)); //主表
 desc classes;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
 create table students(id int primary key, name varchar(20), class_id int, foreign key(class_id) references classes(id)); //副表
  desc students;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | NO   | PRI | NULL    |       |
| name     | varchar(20) | YES  |     | NULL    |       |
| class_id | int         | YES  | MUL | NULL    |       |
+----------+-------------+------+-----+---------+-------+ //属性class_id的key这里表示为MUL
//给主表classes插入四个班级
insert into classes values(1, '一班');
insert into classes values(2, '二班');
insert into classes values(3, '三班');
insert into classes values(4, '四班');
select * from classes;
+----+------+
| id | name |
+----+------+
|  1 | 一班 |
|  2 | 二班 |
|  3 | 三班 |
|  4 | 四班 |
+----+------+
//在students表中给每个班级都插入学号不同的张三
insert into students values(1001, '张三', 1);
insert into students values(1002, '张三', 2);
insert into students values(1003, '张三', 3);
insert into students values(1004, '张三', 4);
select * from students;
+------+------+----------+
| id   | name | class_id |
+------+------+----------+
| 1001 | 张三 |        1 |
| 1002 | 张三 |        2 |
| 1003 | 张三 |        3 |
| 1004 | 张三 |        4 |
+------+------+----------+
//主表classes中没有的数据值,在副表中是不可以使用的。
insert into students values(1005, '张三', 5); //给子表添加一个外键约束失败了,因为父表classes表中class_id字段没有5这个字段值,会报错
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`user`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))
//主表中的某一字段值被副表引用,主表的这个字段值是不可以被删除的
delete from classes where id=4;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`user`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))
//若要想删除,先将附表中的数据删除在删除主表数据
我们先删除学生表中的 四班的'张三'从而解除班级中'四班'的外键约束,再来删除'四班'(因为四班的张三引用了四班)
DELETE FROM student WHERE id = '1004';
再次删除classes表中的'四班';
delete from classes where id=4;
select * from classes;
+----+------+
| id | name |
+----+------+
|  1 | 一班 |
|  2 | 二班 |
|  3 | 三班 |
+----+------+
'四班'被成功删除!
//对于外键约束大家可以联想 省,市 来进行联想 (市必须要依赖于省,只要省还有一个市在引用,那么就不可以删除省,要不然市就没有省了. 那么我们想删除省,必须要将该省下所有的市全部删除之后,才可以删除这个省)