||
启动MySQL服务之后,输入以下命令连接到MySQL服务器:
[root@zhyno1 ~]# mysql -uroot -pmysql代表客户端命令、-u后面跟的是用户名、-p表示需要输入的密码
创建库命令:
创库命令,使用此方法创建,使用的是默认的字符集CREATE DATABASE dbname;创建数据库且带上字符集CREATE DATABASE dbname2 CHARACTER SET 'utf8';查看数据库支持的字符集SHOW VARIABLES LIKE 'character_%';+--------------------------+-----------------------------------+| Variable_name | Value |+--------------------------+-----------------------------------+| character_set_client | utf8 || character_set_connection | utf8 || character_set_database | utf8mb4 || character_set_filesystem | binary || character_set_results | utf8 || character_set_server | utf8mb4 || character_set_system | utf8 || character_sets_dir | /www/server/mysql/share/charsets/ |+--------------------------+-----------------------------------+如果创建的数据库存在,则不会创建且不会报错,反之则创建CREATE DATABASE IF NOT EXISTS dbname;查看数据库的字符集show create database zhytest;+----------+------------------------------------------------------------------+| Database | Create Database |+----------+------------------------------------------------------------------+| zhytest | CREATE DATABASE `zhytest` /*!40100 DEFAULT CHARACTER SET utf8 */ |+----------+------------------------------------------------------------------+utf8便是数据库的字符集查看当前使用的数据库SELECT DATABASE() FROM DUAL;+------------+| DATABASE() |+------------+| zhytest |+------------+查看当前数据库下保存的数据表SHOW TABLES ;查看别的数据下保存的数据表;SHOW TABLES FROM zhytest;修改数据库字符集ALTER DATABASE mytest2 CHARACTER SET 'utf8';
现在创建一个库叫test1;
mysql> CREATE DATABASE test1;Query OK, 1 row affected (0.00 sec)
创建成功后会返回Query OK, 1 row affected (0.00 sec),首先
如果需要查看数据库中有那些库可以用
mysql> SHOW DATABASES;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test1 || zhy || zhytest |+--------------------+6 rows in set (0.00 sec)
在查看完已有数据库后,选择要操作的数据库
USE dbname;例如选择test1mysql> USE test1;Database changed再用以下命令来查看test1库中创建的表mysql> SHOW TABLES;Empty set (0.00 sec)因为这个库下面没有表,所以显示Empty set那我们查看一下mysql表USE mysql;mysql> SHOW TABLES;+---------------------------+| Tables_in_mysql |+---------------------------+| columns_priv || db || event || time_zone_transition || time_zone_transition_type || user |+---------------------------+6 rows in set (0.00 sec)表太多这边做删减
方式1DROP DATABASE dbname;方式2-如果要删除的数据库存在,则删除成功,如果不存在,则默默结束,不会报错;DROP DATABASE IF EXISTS dbname;例如要删除test1mysql> DROP DATABASE IF EXISTS test1;Query OK, 0 rows affected (0.00 sec)
在数据库中创建数据表基本语法如下:
CREATE TABLE [IF NOT EXISTS]tablename( COLUMN_NAME_1 COLUMN_TYPE_1 CONSTRAINTS COLUMN_NAME_2 COLUMN_TYPE_2 CONSTRAINTS 字段3, 数据类型 [约束条件] [默认值], ... COLUMN_NAME_N COLUMN_TYPE_N CONSTRAINTS)
举例:
mysql> CREATE TABLE IF NOT EXISTS emp( ename varchar(10),hiredate date ,sal int(2),deptno int(2));Query OK, 0 rows affected (0.02 sec)查看表结构mysql> desc emp;+----------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+-------+| ename | varchar(10) | YES | | NULL | || hiredate | date | YES | | NULL | || sal | int(2) | YES | | NULL | || deptno | int(2) | YES | | NULL | |+----------+-------------+------+-----+---------+-------+4 rows in set (0.00 sec)为了得到更全面的建表信息使用mysql> show create table emp \G;*************************** 1. row *************************** Table: empCreate Table: CREATE TABLE `emp` ( `ename` varchar(10) DEFAULT NULL, `hiredate` date DEFAULT NULL, `sal` int(2) DEFAULT NULL, `deptno` int(2) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)ERROR: No query specified可以看到存储引擎和字符集,\G是指可以按照竖向排列
创建一个表zhytest2实现对zhytest的复制,但是不包括表数据的复制;
CREATE TABLE zhytest2AS SELECT *FROM zhytestWHRER 1 = 2;通过WHERE 1=2 实现每一条表的数据过来,都返回0
删表命令如下:
DROP TABLE IF EXISTS tablename;要删除emp表如下DROP TABLE IF EXISTS emp;
清空表命令如下:
TRUNCATE TABLE zhytest;
使用 ALTER TABLE 语句可以实现:
ALTER TABLE tablename MODIFY [COLUMN] COLUMN_DEFINITION [FIRST / AFTER COL_NAME]例如修改emp表中的ename字段定义,将varcher(10)改为varcher(20)mysql> desc emp;+----------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+-------+| ename | varchar(10) | YES | | NULL | || hiredate | date | YES | | NULL | || sal | int(2) | YES | | NULL | || deptno | int(2) | YES | | NULL | |+----------+-------------+------+-----+---------+-------+4 rows in set (0.00 sec)mysql> ALTER TABLE emp MODIFY ename varchar(20);Query OK, 0 rows affected (0.03 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> desc emp;+----------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+-------+| ename | varchar(20) | YES | | NULL | || hiredate | date | YES | | NULL | || sal | int(2) | YES | | NULL | || deptno | int(2) | YES | | NULL | |+----------+-------------+------+-----+---------+-------+4 rows in set (0.00 sec)
那如果我们要添加字段要怎么操作呢:
ALTER TABLE tablename ADD [COLUMN] COLUMN_DEFINITION [FIRST / AFTER COL_NAME]例如在emp中新增字段age,类型为int(3)mysql> ALTER TABLE emp ADD COLUMN age int(3);Query OK, 0 rows affected (0.02 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> DESC emp;+----------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+-------+| ename | varchar(20) | YES | | NULL | || hiredate | date | YES | | NULL | || sal | int(2) | YES | | NULL | || deptno | int(2) | YES | | NULL | || age | int(3) | YES | | NULL | |+----------+-------------+------+-----+---------+-------+5 rows in set (0.00 sec)默认添加到最后一个字段如果想要添加到其他位置:放在第一个ALTER TABLE emp ADD COLUMN age int(3) FIRST;放在指定字段后面 salALTER TABLE emp ADD COLUMN age int(3) AFTER sal;
删除字段怎么做呢
ALTER TABLE tablename DROP [COLUMN] col_name;删除age字段ALTER TABLE emp DROP [COLUMN] age;
那如何改名字段呢
ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition [FIRST / AFTER COL_NAME];将age改为age1并且字段类型修改为int(4)ALTER TABLE emp CHANGE age age1 int(4);
方式1RENAME TABLE zhytestTO zzhhyytest;方式2ALTER TABLE myemp2RENAME myemp12;
==标黄==为实际开发过程中实际最长使用的数据类型
类型 | 类型举例 |
---|---|
整数类型 | TINYINT、SMALLINT、MEDIUMINT、==INT(或INTEGER)==、BIGINT |
浮点类型 | FLOAT、DOUBLE |
定点数类型 | ==DECIMAL== |
位类型 | BIT |
日期时间类型 | YEAR、TIME、==DATE==、DATETIME、TIMESTAMP |
文本字符串类型 | CHAR、==VARCHAR==、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT |
枚举类型 | ENUM |
集合类型 | SET |
二进制字符串类型 | BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB |
JSON类型 | JSON对象、JSON数组 |
空间数据类型 | 单值:GEOMETRY、POINT、LINESTRING、POLYGON; 集合:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、 GEOMETRYCOLLECTION |
相同点:都可以实现对表中所有数据的删除,同时保留表结构。
不同点:TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,==数据是不可以回滚的==。
DELETE FROM:一旦执行此操作,表数据可以全部清除(不带WHERE)。同时数据是==可以实现回滚的==。
DELETE FROM回滚到最近的一次COMMIT操作:提交数据COMMIT;查询表所有数据SELECT *FROM zhytest;执行开启可回滚指令SET autocommit = FALSE;清空表数据DELETE FROM myemp3;再次查看是否有数据SELECT *FROM zhytest; 回滚ROLLBACK;发现表中数据回来SELECT *FROM zhytest; TRUNCATE TABLE不做示范,无法回滚。
二者如何选择?
阿里开发规范:
【参考】TRUNCATE TABLE 比 DELETE FROM速度快,且使用的系统和事务日志资源少,但 TRUNCATE 无事务且不触发 TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句。
说明:TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同。
如果我们删除这两个表DROP TABLE book1,book2;数据库会报错ERROR 1051 (42S02): Unknown table 'mytest.book2'但是还是把book1给删除了
如果我们用MySQL8.0,就不会把book1给删除,因为8.0具有原子化,即指令都是一个整体,不可拆分,如果一个有错误,即会马上回滚,而不会执行。
原子化指的就是 ‘增删改查’ 等组成的事务是一个整体,要么全部执行成功,一旦有一个执行失败则进行回滚,全部都不进行执行,这个整体性不可分割类似于原子。这个只在MySQL8.0中体现。
合作电话:010-64087828
社区邮箱:greatsql@greatdb.com