数据库基础学习

    科技2022-07-13  114

    MYSQL数据库学习01

    数据库概念:

    一.如何使用终端操作数据库

    1.登录/使用数据库服务器(在命令行中操作):
    mysql -u(+用户名) -p(+用户密码) 例子: mysql -uroot -p123456
    2.如何查询数据库服务器中所有数据库?
    mysql> show databases -> ; +--------------------+ | Database | +--------------------+ | information_schema | | award | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.08 sec)
    3.如何选中某一个数据库进行操作
    mysql> use award Database changed

    –查看数据库中的表

    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: 0

    set后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 字段名。

    MySQL建表约束

    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 null

    3.自增约束

    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: 0

    5.非空约束 修饰的字段不能为空,与唯一约束差不多 将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主编程一五八俱乐部的数据库教学视频

    Processed: 0.017, SQL: 8