一.如何使用终端操作数据库
–查看数据库中的表
mysql> show tables;–sql中查询记录的语句 select * from 表名 (where id = 1); –如何退出服务器
mysql> exit; Bye–如何在数据库服务器中创建我们的数据库
mysql> create database test; Query OK, 1 row affected (0.01 sec) mysql> use test; Database changed mysql> show tables; Empty set (0.00 sec)–因为刚刚创建的数据库没有数据表 所以需要创建表,例如:
mysql> create table student( -> name varchar(20), -> sex char(1), -> birth date); Query OK, 0 rows affected (0.08 sec)其中student后()中的每一行称为一个字段 每个字段中前面为字段名 后面为数据类型
–查看数据表是否创建好: –查看创建好的student表的结构: –查看表中的记录
mysql> select * from student -> ; Empty set (0.00 sec)–如何往数据表中添加数据记录 字符串,日期类等数据类型需要用单引号括起来
mysql> insert into student -> value('zhangsan','m','1999-03-20'); Query OK, 1 row affected (0.03 sec)再次查询: –在数据表末尾添加字段
一个完整的字段包括字段名、数据类型和约束条件。MySQL 添加字段的语法格式如下: ALTER TABLE <表名> ADD <新字段名><数据类型>[约束条件];
mysql> alter table student add age int(3); Query OK, 1 row affected (0.33 sec) Records: 1 Duplicates: 0 Warnings: 0添加后表的结构: 更新表的记录:
mysql> update student -> set age=21 where name = 'zhangsan'; Query OK, 1 row affected (0.06 sec) Rows matched: 1 Changed: 1 Warnings: 0set后where前 是需要修改或更新的记录 例如上面这条 可以在’age=21‘后加上 ‘ sex=‘f’ ’ 则更新后的表zhangsan的sex值将变为‘f’; where用来找到需要更新的记录 若不设where 则修改表中的所有记录 原来的表 更新后: –MySQL常用数据类型 1.数值 如int integer 2.日期/时间 date 3.字符串 varchar char
删除数据记录
mysql> delete from student where sex='f' -> ; Query OK, 1 row affected (0.08 sec)where 后的语句同样是用来固定你需要修改或删除的那条记录 总结:数据记录常见操作 1.增加/添加记录:insert into 表名 value( 参数 ); 2.删除 delete 3.修改/更新 update 4.查询 select 5.增加/删除字段:alter table 表名 add/drop 字段名。
1.主键约束 它能够唯一确定一张表中的一条记录,通过给某个字段添加约束 就可以使得该字段不重复且不为空
mysql> create table user( -> id int primary key, -> name varchar(20)); Query OK, 0 rows affected (0.07 sec)查看表的结构 图中圈出来的就是代表id为主键
mysql> insert into user values(1,'zhangsan'); ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY' mysql> insert into user values(2,'zhangsan'); Query OK, 1 row affected (0.03 sec)当已在表中添加id为1的数据记录zhangsan时 再次添加会发生错误
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'如添加记录时将id设置为空也会发生错误
mysql> insert into user value(null,'lisi'); ERROR 1048 (23000): Column 'id' cannot be null这就是主键的特点不重复且不为空 用户可以通过设为主键的字段唯一确定一条记录
2.联合主键 只要联合的主键值加起来不重复即可
mysql>create table user2( ->id int, ->name varchar(20), ->passward varchar(20), ->primary key(id,name) ->); mysql> insert into user2 values(1,'zhangsan','123'); Query OK, 1 row affected (0.03 sec) mysql> insert into user2 values(1,'zhangsan','123'); ERROR 1062 (23000): Duplicate entry '1-zhangsan' for key 'PRIMARY' mysql> insert into user2 values(2,'zhangsan','123'); Query OK, 1 row affected (0.01 sec) mysql> insert into user2 values(1,'lisi','123'); Query OK, 1 row affected (0.05 sec)不过联合的任一主键值不能为空
mysql> insert into user2 values(null,'lisi','123'); ERROR 1048 (23000): Column 'id' cannot be null3.自增约束
mysql> create table user3( -> id int primary key auto_increment, -> name varchar(20) -> ); Query OK, 0 rows affected (0.14 sec) mysql> desc user3; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ 2 rows in set (0.03 sec)创建同样的name字段时 id会自动生成来约束该条记录 这就是自增约束
当建表时忘记设置主键 使用 alter table 表名 add primary key(想要设为主键的字段名); 想要删除主键 alter table 表名 drop primary key; 4.唯一约束
mysql> create table user4( -> id int , -> name varchar(20) -> );添加唯一约束
mysql> alter table user4 add unique(name); Query OK, 0 rows affected (0.11 sec) Records: 0 Duplicates: 0 Warnings: 0或者
mysql> alter table user4 modify name varchar(20) unique; Query OK, 0 rows affected (0.14 sec) Records: 0 Duplicates: 0 Warnings: 0也可以建表时直接设置unique
mysql> create table user4( -> id int , -> name varchar(20), -> unique(name) -> );或者
mysql> create table user4( -> id int , -> name varchar(20) unique -> );都能得到如下结构的表
mysql> desc user4; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | UNI | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.03 sec)可以看到name的约束值为uni,试着添加有同样的name值的记录
mysql> insert into user4 values(1,'zhangsan'); Query OK, 1 row affected (0.03 sec) mysql> insert into user4 values(2,'zhangsan'); ERROR 1062 (23000): Duplicate entry 'zhangsan' for key 'name'只要name值不同即可添加
mysql> insert into user4 values(1,'lisi'); Query OK, 1 row affected (0.05 sec)与主键的区别 唯一约束可以设置空值
mysql> insert into user4 values(2,null); Query OK, 1 row affected (0.03 sec) mysql> select *from user4; +------+----------+ | id | name | +------+----------+ | 1 | zhangsan | | 1 | lisi | | 2 | NULL | +------+----------+ 3 rows in set (0.00 sec)如何删除唯一约束
mysql> alter table user4 drop index name; Query OK, 0 rows affected (0.12 sec) Records: 0 Duplicates: 0 Warnings: 05.非空约束 修饰的字段不能为空,与唯一约束差不多 将unique改为not null
6.默认约束 给字段设置默认值 不给该字段传值时 就会以这个默认值代替
mysql> create table user5( -> id int, -> name varchar(20), -> age int default 10 -> ); Query OK, 0 rows affected (0.13 sec mysql> desc user5; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | age | int(11) | YES | | 10 | | +-------+-------------+------+-----+---------+-------+ 3 rows in set (0.03 sec)这时我们试着只给id,name传值:
mysql> insert into user5 (id,name) values(1,'lixing'); Query OK, 1 row affected (0.02 sec)然后用select查看:
mysql> select * from user5; +------+--------+------+ | id | name | age | +------+--------+------+ | 1 | lixing | 10 | +------+--------+------+ 1 row in set (0.00 sec)若传值则不会用到默认值;
7.外键约束 涉及到两个表 :父表、子表//主表、副表
–班级
mysql> create table classes( -> id int primary key, -> name varchar(20) -> );–学生
mysql> create table students( -> id int primary key, -> name varchar(20), -> class_id int, -> foreign key(class_id) references classes(id) -> );向班级中插入三条记录:
mysql> insert into classes values(1,'First class'); Query OK, 1 row affected (0.07 sec) mysql> insert into classes values(2,'Second class'); Query OK, 1 row affected (0.07 sec) mysql> insert into classes values(3,'Third class'); Query OK, 1 row affected (0.06 sec)再向学生中插入三条记录:
mysql> insert into students values(1001,'zhangsan',1); Query OK, 1 row affected (0.06 sec) mysql> insert into students values(1002,'zhangsan',2); Query OK, 1 row affected (0.05 sec) mysql> insert into students values(1003,'zhangsan',3); Query OK, 1 row affected (0.06 sec)如果在学生表中添加班级表没有的id会如何?
mysql> insert into students values(1004,'lisi',4); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))可以看到 主表classes中没有的数据值 在副表中是不可以使用的。 另外主表的记录被副表引用时,是不可以被删除的:
mysql> delete from classes where id=1; ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))这篇是我学习数据库时的笔记 参考了某站up主编程一五八俱乐部的数据库教学视频