创建和删除数据库

创建数据库—create database

password: c1663884773

  1. C:\Users\chenh>mysql -u root -p
  2. Enter password: ***********
  3. Welcome to the MySQL monitor. Commands end with ; or \g.
  4. Your MySQL connection id is 13
  5. Server version: 8.0.17 MySQL Community Server - GPL
  6. Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
  7. Oracle is a registered trademark of Oracle Corporation and/or its
  8. affiliates. Other names may be trademarks of their respective
  9. owners.
  10. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  11. mysql> create database school;
  12. Query OK, 1 row affected (0.01 sec)
  13. mysql> create database school;
  14. ERROR 1007 (HY000): Can't create database 'school'; database exists
  15. mysql> create database if not exists school;
  16. Query OK, 1 row affected, 1 warning (0.00 sec)
  17. mysql> show warnings;
  18. +-------+------+-------------------------------------------------+
  19. | Level | Code | Message |
  20. +-------+------+-------------------------------------------------+
  21. | Note | 1007 | Can't create database 'school'; database exists |
  22. +-------+------+-------------------------------------------------+
  23. 1 row in set (0.00 sec)

显示所有数据库-show databases

  1. mysql> show databases;
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | mysql |
  7. | performance_schema |
  8. | sakila |
  9. | school |
  10. | sys |
  11. | world |
  12. +--------------------+
  13. 7 rows in set (0.00 sec)

选择要使用的数据库-use database

  1. mysql> show tables form mysql;
  2. ERROR 1046 (3D000): No database selected
  3. mysql> use mysql;
  4. Database changed
  5. mysql> show tables from mysql;
  6. +---------------------------+
  7. | Tables_in_mysql |
  8. +---------------------------+
  9. | columns_priv |
  10. | component |
  11. | db |
  12. | default_roles |
  13. | engine_cost |
  14. | func |
  15. | general_log |
  16. | global_grants |
  17. | gtid_executed |
  18. | help_category |
  19. | help_keyword |
  20. | help_relation |
  21. | help_topic |
  22. | innodb_index_stats |
  23. | innodb_table_stats |
  24. | password_history |
  25. | plugin |
  26. | procs_priv |
  27. | proxies_priv |
  28. | role_edges |
  29. | server_cost |
  30. | servers |
  31. | slave_master_info |
  32. | slave_relay_log_info |
  33. | slave_worker_info |
  34. | slow_log |
  35. | tables_priv |
  36. | time_zone |
  37. | time_zone_leap_second |
  38. | time_zone_name |
  39. | time_zone_transition |
  40. | time_zone_transition_type |
  41. | user |
  42. +---------------------------+
  43. 33 rows in set (0.01 sec)
  44. mysql> show columns from users from mysql;
  45. ERROR 1146 (42S02): Table 'mysql.users' doesn't exist
  46. mysql> show columns from user from mysql;
  47. +--------------------------+-----------------------------------+------+-----+-----------------------+-------+
  48. | Field | Type | Null | Key | Default | Extra |
  49. +--------------------------+-----------------------------------+------+-----+-----------------------+-------+
  50. | Host | char(255) | NO | PRI | | |
  51. | User | char(32) | NO | PRI | | |
  52. | Select_priv | enum('N','Y') | NO | | N | |
  53. | Insert_priv | enum('N','Y') | NO | | N | |
  54. | Update_priv | enum('N','Y') | NO | | N | |
  55. | Delete_priv | enum('N','Y') | NO | | N | |
  56. | Create_priv | enum('N','Y') | NO | | N | |
  57. | Drop_priv | enum('N','Y') | NO | | N | |
  58. | Reload_priv | enum('N','Y') | NO | | N | |
  59. | Shutdown_priv | enum('N','Y') | NO | | N | |
  60. | Process_priv | enum('N','Y') | NO | | N | |
  61. | File_priv | enum('N','Y') | NO | | N | |
  62. | Grant_priv | enum('N','Y') | NO | | N | |
  63. | References_priv | enum('N','Y') | NO | | N | |
  64. | Index_priv | enum('N','Y') | NO | | N | |
  65. | Alter_priv | enum('N','Y') | NO | | N | |
  66. | Show_db_priv | enum('N','Y') | NO | | N | |
  67. | Super_priv | enum('N','Y') | NO | | N | |
  68. | Create_tmp_table_priv | enum('N','Y') | NO | | N | |
  69. | Lock_tables_priv | enum('N','Y') | NO | | N | |
  70. | Execute_priv | enum('N','Y') | NO | | N | |
  71. | Repl_slave_priv | enum('N','Y') | NO | | N | |
  72. | Repl_client_priv | enum('N','Y') | NO | | N | |
  73. | Create_view_priv | enum('N','Y') | NO | | N | |
  74. | Show_view_priv | enum('N','Y') | NO | | N | |
  75. | Create_routine_priv | enum('N','Y') | NO | | N | |
  76. | Alter_routine_priv | enum('N','Y') | NO | | N | |
  77. | Create_user_priv | enum('N','Y') | NO | | N | |
  78. | Event_priv | enum('N','Y') | NO | | N | |
  79. | Trigger_priv | enum('N','Y') | NO | | N | |
  80. | Create_tablespace_priv | enum('N','Y') | NO | | N | |
  81. | ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
  82. | ssl_cipher | blob | NO | | NULL | |
  83. | x509_issuer | blob | NO | | NULL | |
  84. | x509_subject | blob | NO | | NULL | |
  85. | max_questions | int(11) unsigned | NO | | 0 | |
  86. | max_updates | int(11) unsigned | NO | | 0 | |
  87. | max_connections | int(11) unsigned | NO | | 0 | |
  88. | max_user_connections | int(11) unsigned | NO | | 0 | |
  89. | plugin | char(64) | NO | | caching_sha2_password | |
  90. | authentication_string | text | YES | | NULL | |
  91. | password_expired | enum('N','Y') | NO | | N | |
  92. | password_last_changed | timestamp | YES | | NULL | |
  93. | password_lifetime | smallint(5) unsigned | YES | | NULL | |
  94. | account_locked | enum('N','Y') | NO | | N | |
  95. | Create_role_priv | enum('N','Y') | NO | | N | |
  96. | Drop_role_priv | enum('N','Y') | NO | | N | |
  97. | Password_reuse_history | smallint(5) unsigned | YES | | NULL | |
  98. | Password_reuse_time | smallint(5) unsigned | YES | | NULL | |
  99. | Password_require_current | enum('N','Y') | YES | | NULL | |
  100. | User_attributes | json | YES | | NULL | |
  101. +--------------------------+-----------------------------------+------+-----+-----------------------+-------+
  102. 51 rows in set (0.01 sec)
  103. mysql> show errors;
  104. Empty set (0.00 sec)
  105. mysql> create database school;
  106. ERROR 1007 (HY000): Can't create database 'school'; database exists
  107. mysql> show errors;
  108. +-------+------+-------------------------------------------------+
  109. | Level | Code | Message |
  110. +-------+------+-------------------------------------------------+
  111. | Error | 1007 | Can't create database 'school'; database exists |
  112. +-------+------+-------------------------------------------------+
  113. 1 row in set (0.00 sec)

删除数据库-drop database

  1. mysql> creare database abc;
  2. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'creare database abc' at line 1
  3. mysql> create database abc;
  4. Query OK, 1 row affected (0.01 sec)
  5. mysql> show databases;
  6. +--------------------+
  7. | Database |
  8. +--------------------+
  9. | abc |
  10. | information_schema |
  11. | mysql |
  12. | performance_schema |
  13. | sakila |
  14. | sys |
  15. | world |
  16. +--------------------+
  17. 7 rows in set (0.00 sec)
  18. mysql> drop database abc;
  19. Query OK, 0 rows affected (0.01 sec)
  20. mysql> show databases;
  21. +--------------------+
  22. | Database |
  23. +--------------------+
  24. | information_schema |
  25. | mysql |
  26. | performance_schema |
  27. | sakila |
  28. | sys |
  29. | world |
  30. +--------------------+
  31. 6 rows in set (0.00 sec)

创建表

要求创建一个学生选课数据库,里面包含四张表:
1. 学生表,5个字段分别为学号,姓名,性别,出生年月,所在班级
2. 教师表,6个字段分别为教师编号,姓名,性别,出生年月,职称,部门
3. 课程表,3个字段分别为课程号,课程名,授课教师的教师编号
4. 成绩表,3个字段为学号,课程号,成绩

设计学生表(student)的结构

字段 列名 数据类型 可否为空 约束
学号 sno varchar(20) not null 主键
姓名 sname varchar(20) not null
性别 ssex varchar(20) not null default’男’
出生年月 sbirthday datetime
所在班级 sclass varchar(20)

创建学生表(student)

  1. mysql> create table student(
  2. -> sno varchar(20) not null,
  3. -> sname varchar(20) not null,
  4. -> ssex varchar(20) not null default'男',
  5. -> sbirthday datetime,
  6. -> sclass varchar(20));
  7. Query OK, 0 rows affected (0.11 sec)
  8. mysql> show tables from school;
  9. +------------------+
  10. | Tables_in_school |
  11. +------------------+
  12. | student |
  13. +------------------+
  14. 1 row in set (0.00 sec)

设计教师表(teacher)的结构

字段 列名 数据类型 可否为空 约束
教师编号 tno varchar(20) not null 主键
姓名 tname varchar(20) not null
性别 tsex varchar(20) not null default’男’
出生年月 tbirthday datetime
职称 pro varchar(20)
部门 depart varchar(20) not null

创建教师表(teacher)

  1. mysql> create table teacher(
  2. -> tno varchar(20) not null,
  3. -> tname varchar(20) not null,
  4. -> tsex varchar(20) not null default'男',
  5. -> tbirthday datetime,
  6. -> pro varchar(20),
  7. -> depart varchar(20) not null);
  8. Query OK, 0 rows affected (0.06 sec)
  9. mysql> show tables from school;
  10. +------------------+
  11. | Tables_in_school |
  12. +------------------+
  13. | student |
  14. | teacher |
  15. +------------------+
  16. 2 rows in set (0.00 sec)

设计课程表(course)的结构

字段 列名 数据类型 可否为空 约束
课程号 cno varchar(20) not null 主键
课程名 cname varchar(20) not null
教师编号 tno varchar(20) not null 外键

创建课程表(course)

  1. mysql> use school;
  2. Database changed
  3. mysql> create table course(
  4. -> cno varchar(20) not null,
  5. -> cname varchar(20) not null,
  6. -> tno varchar(20) not null);
  7. Query OK, 0 rows affected (0.07 sec)
  8. mysql> show tables from school;
  9. +------------------+
  10. | Tables_in_school |
  11. +------------------+
  12. | course |
  13. | student |
  14. | teacher |
  15. +------------------+
  16. 3 rows in set (0.01 sec)

设计成绩表(score)的结构

字段 列名 数据类型 可否为空 约束
学号 sno varchar(20) not null 外键
课程号 cno varchar(20) not null 外键
成绩 degree decimal(4,1) not null

创建成绩表(score)

  1. mysql> create table score(
  2. -> sno varchar(20) not null,
  3. -> cno varchar(20) not null,
  4. -> degree decimal(4,1) not null);
  5. Query OK, 0 rows affected (0.04 sec)
  6. mysql> show tables from school;
  7. +------------------+
  8. | Tables_in_school |
  9. +------------------+
  10. | course |
  11. | score |
  12. | student |
  13. | teacher |
  14. +------------------+
  15. 4 rows in set (0.00 sec)

添加主键和外键约束

建立基本表间的关联,从而实现连接查询或多表查询

clipboard.png

ALTER TABLE 表名 ADD CONSTRAINT PRIMARY KEY (字段名);

  1. 对学生表(student)添加主键约束(primary key),即设置sno为学生表的主键
    2. 对教师表(teacher)添加主键约束,即设置tno为教师表的主键
    3. 对课程表(course)添加主键约束,即设置cno为课程表的主键
    4. 对成绩表(score)添加主键约束,即设置sno,cno为成绩表的主键

ALTER TABLE 表名 ADD CONSTRAINT FOREIGN KEY (字段名) REFERENCES 表名(字段名);

  1. 对课程表(course)添加外键约束(foreign key),即设置tno为课程表的外键,对应字段是教师表(teacher)的tno
    2. 对成绩表(score)添加外键约束,即设置sno为成绩表的外键,对应字段是学生表(student)的sno
    3. 对成绩表(score)添加外键约束,即设置cno为成绩表的外键,对应字段是课程表(course)的cno
  1. mysql> alter table student add constraint primary key(sno);
  2. Query OK, 0 rows affected (0.07 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
  4. mysql> alter table teacher
  5. -> add constraint primary key(tno);
  6. Query OK, 0 rows affected (0.06 sec)
  7. Records: 0 Duplicates: 0 Warnings: 0
  8. mysql> alter table course add constraint primary key(cno);
  9. Query OK, 0 rows affected (0.06 sec)
  10. Records: 0 Duplicates: 0 Warnings: 0
  11. mysql> alter table course add constraint foreign key(tno) references teacher(tno);
  12. Query OK, 0 rows affected (0.10 sec)
  13. Records: 0 Duplicates: 0 Warnings: 0
  14. mysql> alter table score add constraint primary key(sno,cno);
  15. Query OK, 0 rows affected (0.06 sec)
  16. Records: 0 Duplicates: 0 Warnings: 0
  17. mysql> alter table score add constraint foreign key(sno) references student(sno);
  18. Query OK, 0 rows affected (0.10 sec)
  19. Records: 0 Duplicates: 0 Warnings: 0
  20. mysql> alter table score add constraint foreign key(cno) references course(cno);
  21. Query OK, 0 rows affected (0.12 sec)
  22. Records: 0 Duplicates: 0 Warnings: 0

插入数据

INSERT INTO 表名(列名1,列名2,……,列名n) VALUES(列值1,列值2,……,列值n);

  1. mysql> use school;
  2. Database changed
  3. mysql> insert into student(sno,sname,ssex,sbirthday,sclass)
  4. -> values(108,'曾华','男','1977-09-01',95033);
  5. Query OK, 1 row affected (0.03 sec)
  6. mysql> insert into student(sno,sname,ssex,sbirthday,sclass)
  7. -> values(105,'匡明','男','1997-10-02',95031);
  8. Query OK, 1 row affected (0.01 sec)
  9. mysql> insert into student(sno,sname,ssex,sbirthday,sclass)
  10. -> values(107,'王丽','女','1976-01-23',95033);
  11. Query OK, 1 row affected (0.00 sec)
  12. mysql> insert into student(sno,sname,ssex,sbirthday,sclass)
  13. -> values(101,'李军','男','1976-02-20',95033);
  14. Query OK, 1 row affected (0.01 sec)
  15. mysql> insert into student(sno,sname,ssex,sbirthday,sclass)
  16. -> values(109,'王芳','女','1975-02-10',95031);
  17. Query OK, 1 row affected (0.01 sec)
  18. mysql> insert into student(sno,sname,ssex,sbirthday,sclass)
  19. -> values(103,'陆君','男','1974-06-03',95031);
  20. Query OK, 1 row affected (0.01 sec)
  21. mysql> select * from student;
  22. +-----+-------+------+---------------------+--------+
  23. | sno | sname | ssex | sbirthday | sclass |
  24. +-----+-------+------+---------------------+--------+
  25. | 101 | 李军 | | 1976-02-20 00:00:00 | 95033 |
  26. | 103 | 陆君 | | 1974-06-03 00:00:00 | 95031 |
  27. | 105 | 匡明 | | 1997-10-02 00:00:00 | 95031 |
  28. | 107 | 王丽 | | 1976-01-23 00:00:00 | 95033 |
  29. | 108 | 曾华 | | 1977-09-01 00:00:00 | 95033 |
  30. | 109 | 王芳 | | 1975-02-10 00:00:00 | 95031 |
  31. +-----+-------+------+---------------------+--------+
  32. 6 rows in set (0.01 sec)
  33. mysql> insert into teacher(tno,tname,tsex,tbirthday,pro,depart)
  34. -> values(804,'李诚','男','1958-12-02','副教授','计算机系');
  35. Query OK, 1 row affected (0.01 sec)
  36. -> values(856,'张旭','男','1969-03-12','讲师','电子工程系');
  37. Query OK, 1 row affected (0.01 sec)
  38. mysql> insert into teacher(tno,tname,tsex,tbirthday,pro,depart)
  39. -> values(825,'王萍','女','1972-05-05','助教','计算机系');
  40. Query OK, 1 row affected (0.01 sec)
  41. mysql> insert into teacher(tno,tname,tsex,tbirthday,pro,depart)
  42. -> values(831,'刘冰','女','1977-08-14','助教','电子工程系');
  43. Query OK, 1 row affected (0.01 sec)
  44. mysql> select * from teacher;
  45. +-----+-------+------+---------------------+--------+------------+
  46. | tno | tname | tsex | tbirthday | pro | depart |
  47. +-----+-------+------+---------------------+--------+------------+
  48. | 804 | 李诚 | | 1958-12-02 00:00:00 | 副教授 | 计算机系 |
  49. | 825 | 王萍 | | 1972-05-05 00:00:00 | 助教 | 计算机系 |
  50. | 831 | 刘冰 | | 1977-08-14 00:00:00 | 助教 | 电子工程系 |
  51. | 856 | 张旭 | | 1969-03-12 00:00:00 | 讲师 | 电子工程系 |
  52. +-----+-------+------+---------------------+--------+------------+
  53. 4 rows in set (0.00 sec)
  54. mysql> insert into course(cno,cname,tno)
  55. -> values('3-105','计算机导论',825);
  56. Query OK, 1 row affected (0.01 sec)
  57. mysql> insert into course(cno,cname,tno)
  58. -> values('3-245','操作系统',804);
  59. Query OK, 1 row affected (0.00 sec)
  60. mysql> insert into course(cno,cname,tno)
  61. -> values('6-166','数据电路',856);
  62. Query OK, 1 row affected (0.00 sec)
  63. mysql> insert into course(cno,cname,tno)
  64. -> values('9-888','高等数学',831);
  65. Query OK, 1 row affected (0.02 sec)
  66. mysql> select * from course;
  67. +-------+------------+-----+
  68. | cno | cname | tno |
  69. +-------+------------+-----+
  70. | 3-105 | 计算机导论 | 825 |
  71. | 3-245 | 操作系统 | 804 |
  72. | 6-166 | 数据电路 | 856 |
  73. | 9-888 | 高等数学 | 831 |
  74. +-------+------------+-----+
  75. 4 rows in set (0.00 sec)
  76. mysql> insert into score(sno,cno,degree)
  77. -> values(103,'3-245',86);
  78. Query OK, 1 row affected (0.01 sec)
  79. mysql> insert into score(sno,cno,degree)
  80. -> values(105,'3-245',75);
  81. Query OK, 1 row affected (0.01 sec)
  82. mysql> insert into score(sno,cno,degree)
  83. -> values(109,'3-245',68);
  84. Query OK, 1 row affected (0.01 sec)
  85. mysql> insert into score(sno,cno,degree)
  86. -> values(103,'3-105',92);
  87. Query OK, 1 row affected (0.00 sec)
  88. mysql> insert into score(sno,cno,degree)
  89. -> values(105,'3-105',88);
  90. Query OK, 1 row affected (0.00 sec)
  91. mysql> insert into score(sno,cno,degree)
  92. -> values(109,'3-105',76);
  93. Query OK, 1 row affected (0.01 sec)
  94. mysql> insert into score(sno,cno,degree)
  95. -> values(101,'3-105',64);
  96. Query OK, 1 row affected (0.00 sec)
  97. mysql> insert into score(sno,cno,degree)
  98. -> values(107,'3-105',91);
  99. Query OK, 1 row affected (0.01 sec)
  100. mysql> insert into score(sno,cno,degree)
  101. -> values(108,'3-105',78);
  102. Query OK, 1 row affected (0.01 sec)
  103. mysql> insert into score(sno,cno,degree)
  104. -> values(101,'6-166',85);
  105. Query OK, 1 row affected (0.00 sec)
  106. mysql> insert into score(sno,cno,degree)
  107. -> values(107,'6-166',79);
  108. Query OK, 1 row affected (0.00 sec)
  109. mysql> insert into score(sno,cno,degree)
  110. -> values(108,'6-166',81);
  111. Query OK, 1 row affected (0.00 sec)
  112. mysql> select * from score;
  113. +-----+-------+--------+
  114. | sno | cno | degree |
  115. +-----+-------+--------+
  116. | 101 | 3-105 | 64.0 |
  117. | 101 | 6-166 | 85.0 |
  118. | 103 | 3-105 | 92.0 |
  119. | 103 | 3-245 | 86.0 |
  120. | 105 | 3-105 | 88.0 |
  121. | 105 | 3-245 | 75.0 |
  122. | 107 | 3-105 | 91.0 |
  123. | 107 | 6-166 | 79.0 |
  124. | 108 | 3-105 | 78.0 |
  125. | 108 | 6-166 | 81.0 |
  126. | 109 | 3-105 | 76.0 |
  127. | 109 | 3-245 | 68.0 |
  128. +-----+-------+--------+
  129. 12 rows in set (0.00 sec)