mysql的安装,在linux下进行通过yum进行安装mysql数据库。
yum install mysql-server -y
默认目录:
默认的数据目录:
/var/lib/mysql/ (mysql.sock等文件)
配置文件
/usr/share/mysql (mysql.server命令及配置文件)。
相关命令:
/usr/bin (mysqladmin mysqldump 等命令)
库操作:创建:CREATE DATABASE DB_NAME
查看:SHOW DATABASES
删除:DROP DATABASES
使用:USE DATABASE
表操作:
创建:CREATE DATABASE DB_NAME(
字段1,数据类型,约束条件,
字段2,数据类型,约束条件,
。。。。。。。。。。。,
[表的约束条件]
);
查看表:SHOW TABLES
查看表的结构:dsec table_name
约束:
主键约束:(primary key)
主键:唯一,不重复,不能为空,列。
单子段主键:
由一个字段组成。
CREATE TABLE TEST01
(ID int(11) primary key
name varchar(11)
);
CREATE TABLE TEST02
(id int(11)
name varchar(30)
primary key(id)
);
多字段联合主键:
多个字段组成主键
CREATE TABLE TEST03
(id int(11)
name varchar(30)
primary key(id,name)
);
外键:
在两个表之间建立关系。
当两个表之间建立了关系,是不允许删除的。
保证数据的完整性,和一致性。
定义外键之后,不允许删除另一个表中具有关联关系的行。
主表:具有主键的表
从表:具有外键的表
操作:
创建:
constraint foreign key references (主键列名)
创建外键,test06 id 关联test07 id
create table test07 (
id int(11) primary key,
name varchar(30),
constraint test0607 foreign key (id) references test06(id)
);
主表当中的主键数据类型,与从表的外键的数据的类型相同
非空约束:
NOT NULL 不允许数据为空。
唯一性约束:unique
create table test010 (id int(11) unique, name varchar(30) NOT NULL);
该列唯一,但是只有一个空值。
默认值:defualt
属性值自动增加(extra):auto_increment
create table test11 (
id int(11) primary key auto_increment,
name varchar(30) NOT NULL);
自动增加必须是主键。
表的详细操作:
修改表名称:
alter table 原表名称 rename 新表名称
修改字段的类型
alter table table_name modfiy 字段名称(更改之后的数据类型)
alter table test01 modify name varchar(60);
修改字段名称:
alter table table_name change 原名称 新名称(新字段的数据类型)
添加字段:
alter table table_name add 新的字段 新字段数据类型
alter table test01 add user varchar(20);
在第一列添加:
alter table test01 add user varchar(20) frist;
在name后添加
alter table test01 add user varchar(20) after name;
删除字段:
alter table table_name drop 字段名称;
更改表的存储引擎:
alter table table_name engine=引擎名称。
删除表的外键:
alter table table_name 外键名称drop foreign key
删除表:
删除两个关联的表之前,必须先删除从表当中的外键关联关系。
drop table table_name
mysql的数据类型
整数(int):
tinyint :1个字节
smallint:两个字节
mediumint:三个字节
int:四个字节
bigint:八个字节
1bty=8位(bits)无符号最大值:2的8次方减-1 有符号:2的7次方-1.
浮点类型:
float :单精度浮点数,4bty。
float(m,n)
m:整数的位数
n:小数的位数。
采用四舍五入的方式处理。
double:双精度浮点数,8bty。
定点数类型:
decimal:字符串的方式存储。
日期类型:
datetime :YYYY-MM-DD HH:MM:SS 8字节 取值范围:1000-01-01 00:00:00——9999-12-31 23:59:59
timestamp:YYYY-MM-DD HH:MM:SS 4字节 取值范围:1970-01-01 0
date:yyyy-MM-DD
time:HH:MM:SS
year:YYYY
insert into table_name values('日期')
字符串类型:
char :固定字符串 (多余空白处做删除的处理)
varchar :可边长的字符串(多余的空白处用空格填充),不能为空值。
tinytext :
text
meiumtext
longtext
enum
set
查询:select
select 字段列表 from 表名 where 查询的条件。
select f_id,s_id from test1
单表查询:
查询所有的字段
select * from test1
查询指定的字段
select f-id from test1
查询指定的记录
select 列名 from 表名 where 查询条件。
select f_name from test1 where s_id=101
mysql> select f_name from test1 where s_id=101
-> ;
+--------+
| f_name |
+--------+
| zhang |
+--------+
1 row in set (0.00 sec)
使用in/not in关键字查询,in表示查询的范围;
select s_id from test1 where s_id in (101,102) order by s_id
-> ;
+------+
| s_id |
+------+
| 101 |
| 102 |
+------+
2 rows in set (0.00 sec)
使用not in 关键词查询,not in 表示不在此范围当中
mysql> select s_id from test1 where s_id not in (101) order by s_id
-> ;
+------+
| s_id |
+------+
| 102 |
+------+
1 row in set (0.00 sec)
使用between ..... and .... 关键字查询,
between 起始值 and 结束值
mysql> select s_id from test1 where s_price between 2.0 and 3.0;
+------+
| s_id |
+------+
| 101 |
| 102 |
+------+
2 rows in set (0.00 sec)
使用like关键字查询,(模糊查询)
%:匹配任意长度
_ :下滑线表示任意字符
mysql> select f_name from test1 where f_name like 'z_%';
+--------+
| f_name |
+--------+
| zhang |
+--------+
1 row in set (0.00 sec)
查询空值:
mysql> select * from test2;
+------+-------+
| id | name |
+------+-------+
| 123 | zhang |
| 124 | |
| 125 | |
| 126 | 1 |
| 127 | NULL |
+------+-------+
5 rows in set (0.00 sec)
查询:
mysql> select id from test2 where name IS NULL;
+------+
| id |
+------+
| 127 |
+------+
1 row in set (0.00 sec)
注意:空值和NULL,0,在mysql当中表现的意思都是不一样的。
多条件查询
关键字: AND(与) ;OR(或)
ADN
mysql> select id from test2 where id=123 and name='zhang';
+------+
| id |
+------+
| 123 |
+------+
1 row in set (0.00 sec)
OR
mysql> select id from test2 where id=123 OR name IS NULL;
+------+
| id |
+------+
| 123 |
| 127 |
+------+
2 rows in set (0.00 sec)
单表查询结果排序。
关键字:ORDER BY
mysql> select id from test2 order by id;
+------+
| id |
+------+
| 123 |
| 124 |
| 125 |
| 126 |
| 127 |
+------+
5 rows in set (0.00 sec)
合并查询:
将两个或者多个select语句合并查询结果输出。
关键字:UNION
mysql> select id,name from test2 where id < 125 UNION ALL select id,name from test2 where id in (122,126);
+------+-------+
| id | name |
+------+-------+
| 123 | zhang |
| 124 | |
| 126 | 1 |
+------+-------+
3 rows in set (0.00 sec)
参数:All:是不删除重复的行。
不加ALL表示删除重复的行。
mysql正则表达式的查询:
关键字:regexp
^匹配文件的开头字符$匹配文件结尾.匹配单个字符*匹配任意字符0-n次+匹配前面的字符一次或者多次。[集合]匹配一个范围内的字符[^]匹配不再范围内的字符{n,}匹配前面的字符至少n次{n,m}匹配前面的字符最少n次,最多m次匹配包含<>内字符串的文本^
mysql> select name from test2 where name regexp '^z';
+-------+
| name |
+-------+
| zhang |
+-------+
1 row in set (0.00 sec)
$
mysql> select name from test2 where name regexp 'g$';
+-------+
| name |
+-------+
| zhang |
+-------+
1 row in set (0.00 sec)
.
mysql> select name from test2 where name regexp '.';
+-------+
| name |
+-------+
| zhang |
| 1 |
+-------+
2 rows in set (0.00 sec)
*
mysql> select name from test2 where name regexp 'z*';
+-------+
| name |
+-------+
| zhang |
| |
| |
| 1 |
+-------+
4 rows in set (0.00 sec)
+
mysql> select name from test2 where name regexp 'z+';
+-------+
| name |
+-------+
| zhang |
+-------+
1 row in set (0.00 sec)
数据表中的插入数据:
insert into 表名 (字段1,字段2,...) values('值1','值2');
mysql> insert into in01 (id,name) values (01,'zhang');
Query OK, 1 row affected (0.00 sec)
mysql> select * from in01;
+------+-------+
| id | name |
+------+-------+
| 1 | zhang |
+------+-------+
1 row in set (0.00 sec)
全部字段插入与单个字段的差异指定在插入的时候指定的字段的个数,想插入那个字段就指定某个字段就可以了。
同时插入多条记录。
mysql> insert into in01(id,name) values (02,'shi'), (03,'wo'), (04,'xio');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
结果插入到数据表当中
inesrt into 表1(字段1,字段2)select (字段3) from 表 2 where
表一:需要进行的插入的表
要求表2当中的字段与表一相同,数据类型也相同。
mysql> insert into in01(id,name)
-> select id,name from in02;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> select * from in01;
+------+--------+
| id | name |
+------+--------+
| 1 | zhang |
| 2 | shi |
| 3 | wo |
| 4 | xio |
| 5 | jdisji |
+------+--------+
5 rows in set (0.00 sec)
数据表当中的更新与删除。
update:更新
update 表名 set 字段1=值1,字段=字段2 where (条件);
mysql> update in01 set id=100,name='shijie' where id=01;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from in01;
+------+--------+
| id | name |
+------+--------+
| 100 | shijie |
| 2 | shi |
| 3 | wo |
| 4 | xio |
| 5 | jdisji |
+------+--------+
5 rows in set (0.00 sec)
一定要指定条件,where,如果没有使用where,会更新所有的数据。
删除表中的数据。
delete:删除
delete from 表名 where
mysql> delete from in01 where name='shijie';
Query OK, 1 row affected (0.00 sec)
mysql> select * from in01;
+------+--------+
| id | name |
+------+--------+
| 2 | shi |
| 3 | wo |
| 4 | xio |
| 5 | jdisji |
+------+--------+
4 rows in set (0.00 sec)
索引
索引的含义:
磁盘空间的数据库结构, 包含数据表 中所有创建索引的记录。
所有的存储引擎,支持大于或等于16索引,索引的长度256字节以上。
Btree:mysam,innodb
hash(哈希):memory,heap。
索引的特点:
1,创建唯一的索引。可以保证数据表中每一行的数据唯一性。
2,加快数据库的查询速度。
3,加快表与表之间的链接。
缺点:
耗费时间
占用磁盘空间。
索引的分类:
1,普通索引:允许定义索引的列当中出现或插入重复值或者空值。
2,唯一索引:索引列的值可以为空,但是必须唯一。
组合索引:组合的字段必须唯一,
主键索引:不允许有空值。
单列索引:一个索引包含一个列,一个表可以有多个单列索引。
组合索引:组合多个字段创建索引。(id ,name ,age)
全文索引:fulltext,全文查找,允许定义索引的列中出现插入重复和空值,仅支持char varchar text类型的字段
索引的设计方案要求:
1,并非越多越好。多会占用磁盘空间,降低管理语句的性能。
2,避免对经常发生变动数据表建立索引。
3,数据量小,无需创建索引。
1,创建表时创建索引。
create table 表名 (字段1,字段2)[option] index(索引名)(字段名);
option: unqiue,fulltext,spatial。
mysql> create table ind01(
-> id int(10),
-> name varchar(40),
-> year YEAR NOT NULL,
-> index(year)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> show create table ind01 \G
*************************** 1. row ***************************
Table: ind01
Create Table: CREATE TABLE `ind01` (
`id` int(10) DEFAULT NULL,
`name` varchar(40) DEFAULT NULL,
`year` year(4) NOT NULL,
KEY `year` (`year`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.01 sec)
唯一索引的创建:
mysql> create table ind02 ( id INT NOT NULL, name VARCHAR(40), year YEAR, UNIQUE INDEX name_index(id) );
Query OK, 0 rows affected (0.02 sec)
单列索引:
在某个字段当中创建索引
mysql> create table ind03(
-> id INT(11),
-> name VARCHAR(40),
-> index ON_index(name(20)
-> );
组合索引:
mysql> create table ind04(
-> id int(20),
-> name varchar(40),
-> age int not null,
-> index more_index(id,name)
-> );
全文索引:
fulltext,存储引擎支持mysam,只支持,char,varchar,text类型。
mysql> create table ind05( id int not null, name varchar(30), age int not null, fulltext index full_test(name) );
Query OK, 0 rows affected (0.01 sec)
mysql> explain select * from ind05 where id=03;
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | ind05 | ALL | NULL | NULL | NULL | NULL | 3 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)
空间索引:
mysql> create table ind06(
-> a geometry not null,
-> spatial index spa_test(a)
-> );
Query OK, 0 rows affected (0.02 sec)
删除索引:
alter table
drop index
alter
mysql> alter table ind01 drop index year;
Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0 Warnings: 0
drop
mysql> drop index name_index ON ind02;
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
视图:
从多个表或者一个表中获取的数据,组成的一个虚拟表。
提高数据库系统的安全性。
视图表中的数据来源于数据表,数据表当中的数据发生了变化时,视图表当中的数据也发生了变化。
创建视图:
create [or replace] [algorihm={undefine|merge|temptabele}] view view_name[(colum_list)] as select_statement [with {cascaded|local} check option]
create:创建新的视图
replace:替换已存在的视图
algorithm:视图算法
undefine:不定义,自动选择算法
merge:将视图的语句与视图的定义合并起来。
temptable:将视图的结果存入零时表中。使用零时表进行操作。
colum_list:属性列。
cascaded:默认值,表示更新视图时要满足视图和表的所有条件
local;满足视图的条件即可。
select_statement:查询语句。
单表创建视图:
mysql> create view vi01_test as select id,uid, id*uid from vi01;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from vi01_test;
+------+------+--------+
| id | uid | id*uid |
+------+------+--------+
| 1 | 100 | 100 |
+------+------+--------+
1 row in set (0.00 sec)
id*uid :表示id与uid 做了一个乘法。
视图以表的方式呈现在数据库当中
mysql> show tables;
+---------------------+
| Tables_in_view_test |
+---------------------+
| vi01 |
| vi01_test |
+---------------------+
插入数据:
在数据表当中插入数后,视图当中的信息将会更新;
mysql> insert into vi01(id,uid) values
-> (2,90);
Query OK, 1 row affected (0.00 sec)
mysql> select * from vi01_test;
+------+------+--------+
| id | uid | id*uid |
+------+------+--------+
| 1 | 100 | 100 |
| 2 | 90 | 180 |
+------+------+--------+
2 rows in set (0.00 sec)
多表创建视图:
mysql> select * from student;
+------+-------+
| id | name |
+------+-------+
| 1 | zhang |
| 2 | shi |
| 3 | xiong |
+------+-------+
3 rows in set (0.00 sec)
mysql> select * from stu_info;
+------+---------+
| s_id | class |
+------+---------+
| 1 | zzzzzz |
| 2 | ssssss |
| 3 | xxxxxxx |
+------+---------+
3 rows in set (0.00 sec)
mysql> create view vi02_test(id,name,class) as select student.id,student.name,stu_info.class from student,stu_info where student.id=stu_info.s_id;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from vi02_test
-> ;
+------+-------+---------+
| id | name | class |
+------+-------+---------+
| 1 | zhang | zzzzzz |
| 2 | shi | ssssss |
| 3 | xiong | xxxxxxx |
+------+-------+---------+
3 rows in set (0.00 sec)