MySQL

MySQL

mysql是什么:

mysql 是一个关系型数据库管理系统
mysql 就是一个基于socket编写的C/S架构的软件

客户端软件:
	mysql自带:如mysql命令,mysqldump命令等
	python模块:pymysql

数据库管理软件分类

分为两大类:
	关系型:如sqllite,db2,oracle,access,sql server,MySQL,注意:sql语句通用。
	非关系型:mongodb,redis,memcache

可以简单的理解为:
	关系型数据库需要有表结构。
	非关系型数据库是key-value存储的,没有表结构。

下载安装

mysql为我们提供开源的安装在各个操作系统上的安装包,包括ios,linux,windows。

  mysql的安装、启动和基础配置 —— linux版本https://www.cnblogs.com/Eva-J/articles/9664401.html)

  mysql的安装、启动和基础配置 —— mac版本https://www.cnblogs.com/Eva-J/articles/9664401.html)

  mysql的安装、启动和基础配置 —— windows版本https://www.cnblogs.com/Eva-J/articles/9669675.html)

初始sql语句

SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:
1、DDL语句    数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
2、DML语句    数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
3、DCL语句    数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
1. 操作文件夹
        增:create database db1 charset utf8;
        查:show databases;
        改:alter database db1 charset latin1;
        删除: drop database db1;

2. 操作文件
    先切换到文件夹下:use db1
        增:create table t1(id int,name char);
        查:show tables
        改:alter table t1 modify name char(3);
              alter table t1 change name name1 char(2);
        删:drop table t1; 

3. 操作文件中的内容/记录
        增:insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');
        查:select * from t1;
        改:update t1 set name='sb' where id=2;
        删:delete from t1 where id=1;
        清空表:
            delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。
            truncate table t1;数据量大,删除速度比上一条快,且直接从零开始,

            auto_increment 表示:自增
            primary key 表示:约束(不能重复且不能为空);加速查找

创建数据库

语法:
CREATE DATABASE 数据库名 charset utf8;
数据库的命名规则:
1. 可以由字母、数字、下划线、@、#、$ 组成
2. 区分大小写
3. 唯一性
4. 不能使用关键字如:create select
5. 不能单独使用数字
6. 最长128位

数据库相关操作

1. 查看数据库
show databases;
show create database db1;
select database();

2. 选择数据库
use 数据库名

3. 删除数据库
DROP DATABASE 数据库名;

4. 修改数据库
alter database db1 charset utf8

表相关

表介绍:
	表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段。
创建表

语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);

注意:
1.在同一张表中,字段名是不能相同的。
2.宽度和约束条件可选。
3.字段名和类型是必须的。
mysql> create database db_1 charset utf8;
Query OK, 1 row affected (0.00 sec)

mysql> use db_1;
Database changed

mysql> create table i_1(
    -> id int,
    -> name varchar(50),
    -> age int(3)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> desc i_1; # 查看表结构,全写为: describe 表名; 
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(3)      | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
往表中插入数据:

mysql> insert into i_1 values
    -> (1,'zkim',24);
Query OK, 1 row affected (0.00 sec)

mysql> select * from i_1;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | zkim |   24 |
+------+------+------+
1 row in set (0.00 sec)

修改表 ALTER TABLE

语法:
1. 修改表名
      ALTER TABLE 表名 
      		RENAME 新表名;
2. 增加字段
      ALTER TABLE 表名 
      		ADD 字段名  数据类型 [完整性约束条件…],
        	ADD 字段名  数据类型 [完整性约束条件…];
      ALTER TABLE 表名 
      		ADD 字段名  数据类型 [完整性约束条件…]  FIRST;
      ALTER TABLE 表名 
      		ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;
                            
3. 删除字段
      ALTER TABLE 表名 
            DROP 字段名;

4. 修改字段
      ALTER TABLE 表名 
            MODIFY  字段名 数据类型 [完整性约束条件…];
      ALTER TABLE 表名 
            CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
      ALTER TABLE 表名 
            CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
示例:

1. 修改存储引擎
mysql> alter table service 
    -> engine=innodb;
    
2. 添加字段
mysql> alter table student10
    -> add name varchar(20) not null,
    -> add age int(3) not null default 22;
    
mysql> alter table student10
    -> add stu_num varchar(10) not null after name;                //添加name字段之后
    
mysql> alter table student10                        
    -> add sex enum('male','female') default 'male' first;          //添加到最前面

3. 删除字段
mysql> alter table student10
    -> drop sex;

mysql> alter table service
    -> drop mac;

4. 修改字段类型modify
mysql> alter table student10
    -> modify age int(3);
mysql> alter table student10
    -> modify id int(11) not null primary key auto_increment;    //修改为主键

5. 增加约束(针对已有的主键增加auto_increment)
mysql> alter table student10 modify id int(11) not null primary key auto_increment;
ERROR 1068 (42000): Multiple primary key defined

mysql> alter table student10 modify id int(11) not null auto_increment;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

6. 对已经存在的表增加复合主键
mysql> alter table service2
    -> add primary key(host_ip,port);        

7. 增加主键
mysql> alter table student1
    -> modify name varchar(10) not null primary key;

8. 增加主键和自动增长
mysql> alter table student1
    -> modify id int not null primary key auto_increment;

9. 删除主键
a. 删除自增约束
mysql> alter table student10 modify id int(11) not null; 

b. 删除主键
mysql> alter table student10                                 
    -> drop primary key;

复制表

复制表结构+记录 (key不会复制: 主键、外键和索引)
mysql> create table new_service select * from service;

只复制表结构
mysql> select * from service where 1=2;        //条件为假,查不到任何记录
Empty set (0.00 sec)
mysql> create table new1_service select * from service where 1=2;  
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> create table t4 like employees;

插入数据INSERT

1. 插入完整数据(顺序插入)
    语法一:
    INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);

    语法二:
    INSERT INTO 表名 VALUES (值1,值2,值3…值n);

2. 指定字段插入数据
    语法:
    INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);

3. 插入多条记录
    语法:
    INSERT INTO 表名 VALUES
        (值1,值2,值3…值n),
        (值1,值2,值3…值n),
        (值1,值2,值3…值n);
        
4. 插入查询结果
    语法:
    INSERT INTO 表名(字段1,字段2,字段3…字段n) 
                    SELECT (字段1,字段2,字段3…字段n) FROM 表2
                    WHERE …;

更新数据UPDATE

语法:
    UPDATE 表名 SET
        字段1=值1,
        字段2=值2,
        WHERE CONDITION;

示例:
    UPDATE mysql.user SET password=password(‘123’) 
        where user=’root’ and host=’localhost’;

删除数据DELETE

语法:
    DELETE FROM 表名 
        WHERE CONITION;

示例:
    DELETE FROM mysql.user 
        WHERE password=’’;

练习:
    更新MySQL root用户密码为mysql123
    删除除从本地登录的root用户以外的所有用户

查询数据SELECT

单表查询:http://www.cnblogs.com/linhaifeng/articles/7267592.html

多表查询:http://www.cnblogs.com/linhaifeng/articles/7267596.html

千里之行,始于足下。
原文地址:https://www.cnblogs.com/jincoco/p/12937133.html