mysql数据库属于关系型数据库,关系型数据库是指采用关系模型来组织数据的数据库,似于Excel函数关系表。保持数据的一致性是关系型数据库的最大优势
关系型数据库瓶颈:
1.高并发读写硬盘I/O瓶颈;
2.对于关系型数据来说在一张海量数据表中查询效率是非常低的;
3.横向扩展困难,当一个应用系统用户量访问与日俱增的时候数据库没有办法像web server那样简单的通过添加更多的硬件或者节点来扩展和提供负载能力。
对于并发量不高及数据量较小的应用系统mysql还是占有很大优势,且目前mysql属于开源软件,且目前mysql的衍生数据库mariadb也正在快速发育中。
SQL
sql:用户与数据库交付语言,被称为sql,sql是 Structured Query Language 结构话查询语言简称,是关系型数的数据库应用语言;
sql分类
DDL:数据定义语句
这些语句定义了不同数据段,数据库,列,表,索引等数据库对象。常用关键字包括create ,drop ,alter
DML:数据操纵语句
用于添加、删除、更新、、和查询数据库记录、常用语句关键字包括:insert、delete、update、select
DCL:数据控制语言
用于控制不同数据段之前的许可和访问级别语句,这些语句定义了数据库、表、字段、用户访问、权限和安全级别,主要的语句关键字包括grant、revoke。
DDL语句
DDL 是数据定义的缩写,简单来说就是对数据库内部对象进行创建、删除、修改等操作的语言,与DML的区别是DML只是对表内部数据进行操作,而不会涉及到定义结构的修改更不会涉及其他对象,DDL有数据库管理员使用。
库操作
1.数据库创建
启动数据库连接到mysql服务器使用
[root@localhost ~]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.1.73 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
当输入一条命令要其执行后面加上;或者\g结束,如果不添加默认为换行继续输入命令。
使用help;或者\h命令来获取帮助,通过\c命令来清除命令行buffer。
数据库创建语法如下:
CREATE DATABASE DBNAME;
例如:
mysql> CREATE DATABASE liaodb; Query OK, 1 row affected (0.00 sec)
Query OK 表示创建成功,(DML和DDL所有的操作不包括select操作成功后都会显示 Query OK)
1 row affected 表示操作只影响了一行记录;
(0.00 sec)表示操作执行的时间
2.查看数据库
语法:
SHOW DATABASES;
mysql> show DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | liaodb | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec)
默认存在的数据:
information_schema 数据对象信息存储,例如用户表信息。
mysql 存储了系统的用户权限等信息
test系统自动创建的测试数据库,所有用户都可以使用;
3.选择数据库
语法:
USE DBNAME;
mysql> USE mysql; Database changed
4.删除数据库
删除数据语法
drop database DBNAME;
删除我们刚刚创建的数据库liaodb
mysql> drop database liaodb; Query OK, 0 rows affected (0.00 sec)
注:
删除数据库谨慎操作,默认删除数据库后下面的表会一起被删除。
表操作
1.创建表
语法
CREATE TABLE TABLENAME(column_name_1 colemn_type_1 constraints,olumn_name_2 colemn_type_2 constraintsolumn_name_3 colemn_type_3 constraints)
column_name_1 是列的名字;column_type是列的数据类型;constraints是列的约束条件。
下面创建一个最常见的普通班级统计表
表包括name,age,sex,字段类型使用varchar(10) ,date ,varchar(1)
mysql> create table class_one(name varchar(10),age INT(3),sex varchar(1)); Query OK, 0 rows affected (0.02 sec) mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | class_one | +----------------+ 1 row in set (0.00 sec)
2.查看表的定义
语法:
DESC TABLENAME;
mysql> DESC class_one; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | name | varchar(10) | YES | | NULL | | | age | int(3) | YES | | NULL | | | sex | varchar(1) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
查看更为详细的表定义信息
show create table tablename \G; mysql> show create table class_one \G; *************************** 1. row *************************** Table: class_one Create Table: CREATE TABLE `class_one` ( `name` varchar(10) DEFAULT NULL, `age` int(3) DEFAULT NULL, `sex` varchar(1) DEFAULT NULL, ENGINE=MyISAM DEFAULT CHARSET=latin1 1 row in set (0.00 sec) ERROR: No query specified
\G选项的含义是使得记录能够按照字段竖向排列。
3.删除表
DROP TABLE TABLENAME; mysql> DROP TABLE class_one; Query OK, 0 rows affected (0.00 sec)
4.修改表
1)修改表类型语法如下:
ALTER TABLE tablename MODIFY[COLUMN] column_definition [FIRST|AFTER col_name]
例如:将之前制作的class_one表中的name字段类型修改为改为verchar(20)
mysql> alter table class_one modify name varchar(20); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show create table class_one \G; *************************** 1. row *************************** Table: class_one Create Table: CREATE TABLE `class_one` ( `name` varchar(20) DEFAULT NULL, `age` int(3) DEFAULT NULL, `sex` varchar(1) DEFAULT NULL, `deptno` int(2) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 1 row in set (0.00 sec) ERROR: No query specified
2)增加表字段语法如下
ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST|AFTER col_name]
FIRST|AFTER
定义新增的一条字段放置在那条字段前FIRST或者后AFTER
例如在class_one表中添加一条 fraction
mysql> alter table class_one add column fraction int(3); Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc class_one; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | name | varchar(15) | YES | | NULL | | | age | int(3) | YES | | NULL | | | sex | varchar(1) | YES | | NULL | | | fraction | int(3) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
3)删除表中字段语句如下
ALTER TABLE tablename drop [COLUMN] column_definition [FIRST|col_name]
例如将class中fraction和deptno字段删除
mysql> desc class_one; +----------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+------------+------+-----+---------+-------+ | name | varchar(6) | YES | | NULL | | | age | int(3) | YES | | NULL | | | sex | varchar(1) | YES | | NULL | | | fraction | int(3) | YES | | NULL | | +----------+------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) mysql> alter table class_one drop column fraction; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table class_one drop column deptno; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc class_one; +-------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------+------+-----+---------+-------+ | name | varchar(6) | YES | | NULL | | | age | int(3) | YES | | NULL | | | sex | varchar(1) | YES | | NULL | | +-------+------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
4)字段改名语法如下
ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition [FIRST\AFTER col_name]
例如将age字段更改为age1,字段类型更改为int(2);
mysql> alter table class_one change column age age1 int(2); Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc class_one; +-------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------+------+-----+---------+-------+ | name | varchar(6) | YES | | NULL | | | age1 | int(2) | YES | | NULL | | | sex | varchar(1) | YES | | NULL | | +-------+------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
5)更改字段排序
语法关键字
FIRST|AFTER
FIRST 表示放在某字段前
AFTER 表示放在某字段后
示例:新增一个字段为age 并且将其放在name字段后
mysql> alter table class_one add column age int(4) after name; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc class_one -> ; +-------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------+------+-----+---------+-------+ | name | varchar(6) | YES | | NULL | | | age | int(4) | YES | | NULL | | | sex | varchar(1) | YES | | NULL | | +-------+------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
修改字段name将其放到sex字段后
mysql> desc class_one; +-------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------+------+-----+---------+-------+ | name | varchar(6) | YES | | NULL | | | age | int(4) | YES | | NULL | | | sex | varchar(1) | YES | | NULL | | +-------+------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) mysql> alter table class_one modify name varchar(6) after sex; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc class_one; +-------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------+------+-----+---------+-------+ | age | int(4) | YES | | NULL | | | sex | varchar(1) | YES | | NULL | | | name | varchar(6) | YES | | NULL | | +-------+------------+------+-----+---------+-------+ 3 rows in set (0.01 sec)
6)更改表名语法
ALTER TABLE tablename RENAME [TO] new_tablename
例如将class_one 改成成class_1
mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | class_one | +----------------+ 1 row in set (0.00 sec) mysql> alter table class_one rename class_1; Query OK, 0 rows affected (0.00 sec) mysql> show tables ; +----------------+ | Tables_in_test | +----------------+ | class_1 | +----------------+ 1 row in set
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。