尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SQL创建与管理表

SQL创建与管理表 基础知识命名规范数据库名、表名不得超过30个字符变量名限制为29个必须只能包含A–Z, a–z, 0–9, _共63个字符数据库名、表名、字段名等对象名中间不要包含空格同一个MySQL软件中数据库不能同名同一个库中表不能重名同一个表中字段不能重名必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用请在SQL语句中使用着重号引起来保持字段名和类型的一致性在命名字段并为其指定数据类型的时候一定要保证一致性假如数据类型在一个表里是整数那在另一个表里可就别变成字符型了[多表查询]数据类型创建与管理数据库创建数据库[CREATE DATABASE]#方式1 CREATE DATABASE mytest1; # 创建的此数据库使用的是默认的字符集 #查看创建数据库的结构 SHOW CREATE DATABASE mytest1;#方式2显式了指名了要创建的数据库的字符集 CREATE DATABASE mytest2 CHARACTER SET gbk; # SHOW CREATE DATABASE mytest2;#方式3推荐如果要创建的数据库已经存在则创建不成功但不会报错。 CREATE DATABASE IF NOT EXISTS mytest2 CHARACTER SET utf8; #如果要创建的数据库不存在则创建成功 CREATE DATABASE IF NOT EXISTS mytest3 CHARACTER SET utf8;管理数据库#切换数据库 USE atguigudb;#查看当前数据库中保存的数据表 SHOW TABLES;#查看当前使用的数据库 SELECT DATABASE() FROM DUAL;#查看指定数据库下保存的数据表 SHOW TABLES FROM mysql;修改数据库[ALTER DATABASE]#更改数据库字符集 SHOW CREATE DATABASE mytest2; ALTER DATABASE mytest2 CHARACTER SET utf8;注DATABASE 不能改名。一些可视化工具可以改名它是建新库把所有表复制到新库再删旧库完成的。删除数据库[DROP DATABASE]#方式1如果要删除的数据库存在则删除成功。如果不存在则报错 DROP DATABASE mytest1; SHOW DATABASES;#方式2推荐。 如果要删除的数据库存在则删除成功。如果不存在则默默结束不会报错。 DROP DATABASE IF EXISTS mytest1; DROP DATABASE IF EXISTS mytest2;创建数据表[CREATE TABLE]CREATE TABLE [IF NOT EXISTS] 表名( 字段1, 数据类型 [约束条件] [默认值], 字段2, 数据类型 [约束条件] [默认值], 字段3, 数据类型 [约束条件] [默认值], …… [表约束条件] );#方式1白手起家的方式 CREATE TABLE IF NOT EXISTS myemp1( #需要用户具备创建表的权限。 id INT, emp_name VARCHAR(15), #使用VARCHAR来定义字符串必须在使用VARCHAR时指明其长度。 hire_date DATE ); #查看表结构 DESC myemp1; #查看创建表的语句结构 SHOW CREATE TABLE myemp1; #如果创建表时没有指明使用的字符集则默认使用表所在的数据库的字符集。 #查看表数据 SELECT * FROM myemp1;#方式2基于现有的表同时导入数据 CREATE TABLE myemp2 AS SELECT employee_id,last_name,salary FROM employees; DESC myemp2; DESC employees; SELECT * FROM myemp2;说明1查询语句中字段的别名可以作为新创建的表的字段的名称。说明2此时的查询语句可以结构比较丰富使用前面章节讲过的各种SELECTCREATE TABLE myemp3 AS SELECT e.employee_id emp_id,e.last_name lname,d.department_name FROM employees e JOIN departments d ON e.department_id d.department_id; SELECT * FROM myemp3; DESC myemp3;#练习1创建一个表employees_copy实现对employees表的复制包括表数据 CREATE TABLE employees_copy AS SELECT * FROM employees; SELECT * FROM employees_copy; #练习2创建一个表employees_blank实现对employees表的复制不包括表数据 CREATE TABLE employees_blank AS SELECT * FROM employees #where department_id 10000; WHERE 1 2; #山无陵天地合乃敢与君绝。 SELECT * FROM employees_blank;修改表[ALTER TABLE]添加一个字段[ADD]ALTER TABLE myemp1 ADD salary DOUBLE(10,2); #默认添加到表中的最后一个字段的位置 ALTER TABLE myemp1 ADD phone_number VARCHAR(20) FIRST; ALTER TABLE myemp1 ADD email VARCHAR(45) AFTER emp_name;修改一个字段[MODIFY]数据类型、长度、默认值略ALTER TABLE myemp1 MODIFY emp_name VARCHAR(25) ; ALTER TABLE myemp1 MODIFY emp_name VARCHAR(35) DEFAULT aaa;重命名一个字段[CHANGE]包含[MODIFY]的行为ALTER TABLE myemp1 CHANGE salary monthly_salary DOUBLE(10,2); ALTER TABLE myemp1 CHANGE email my_email VARCHAR(50);删除一个字段[DROP COLUMN]ALTER TABLE myemp1 DROP COLUMN my_email;重命名表[RENAME]#方式1 RENAME TABLE myemp1 TO myemp11; DESC myemp11; #方式2 ALTER TABLE myemp2 RENAME TO myemp12; DESC myemp12;删除表[DROP]不光将表结构删除掉同时表中的数据也删除掉释放表空间DROP TABLE IF EXISTS myemp2; DROP TABLE IF EXISTS myemp12;清空表[TRUNCATE]清空表表示清空表中的所有数据但是表结构保留。SELECT * FROM employees_copy; TRUNCATE TABLE employees_copy; SELECT * FROM employees_copy; DESC employees_copy;DCL 中 COMMIT 和 ROLLBACKCOMMIT:提交数据。一旦执行COMMIT则数据就被永久的保存在了数据库中意味着数据不可以回滚。ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近的一次COMMIT之后。对比 TRUNCATE TABLE 和 DELETE FROM相同点都可以实现对表中所有数据的删除同时保留表结构。不同点TRUNCATE TABLE一旦执行此操作表数据全部清除。同时数据是不可以回滚的。DELETE FROM一旦执行此操作表数据可以全部清除不带WHERE。同时数据是可以实现回滚的。DDL 和 DML 的说明① DDL的操作一旦执行就不可回滚。指令SET autocommit FALSE对DDL操作失效。(因为在执行完DDL操作之后一定会执行一次COMMIT。而此COMMIT操作不受SET autocommit FALSE影响的。)# 演示TRUNCATE TABLE #1) COMMIT; #2) SELECT * FROM myemp3; #3) SET autocommit FALSE; #4) TRUNCATE TABLE myemp3; #5) SELECT * FROM myemp3; #6) ROLLBACK; #7) SELECT * FROM myemp3;② DML的操作默认情况一旦执行也是不可回滚的。但是如果在执行DML之前执行了SET autocommit FALSE则执行的DML操作就可以实现回滚。# 演示DELETE FROM #1) COMMIT; #2) SELECT * FROM myemp3; #3) SET autocommit FALSE; #4) DELETE FROM myemp3; #5) SELECT * FROM myemp3; #6) ROLLBACK; #7) SELECT * FROM myemp3;注TRUNCATE TABLE 比 DELETE 速度快且使用的系统和事务日志资源少但TRUNCATE 无事务且不触发 TRIGGER 有可能造成事故故不建议在开发代码中使用此语句。新特性DDL的原子化事务由一个或多个DDL操作共同组成的整体一起成功或者一起失败CREATE DATABASE mytest; USE mytest; CREATE TABLE book1( book_id INT ,rr book_name VARCHAR(255) ); SHOW TABLES; DROP TABLE book1,book2; SHOW TABLES;
返回列表