码迷,mamicode.com
首页 > 数据库 > 详细

MySQL基础进阶

时间:2018-02-24 15:06:18      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:art   sql外键   3.4   rest   精确   padding   数据表   声明   mysql5.7   

一般建议选择典型安装(MSI安装文件)
技术分享图片
询问是否进行配置操作(可以不勾选,之后通过 MySQL配置向导文件 做配置)
技术分享图片
 
MySQL配置向导文件:MysqlInstanceConfig.exe(MySQL5.7版本没有,直接安装)
点击配置向导文件,选择配置类型(标准配置)
技术分享图片
勾选安装Windows服务.同时自动配置环境变量到Windows中
技术分享图片
设置MySQL密码
技术分享图片
其它配置步骤选择默认操作
   
 
 
 
注:安装配置完成后,检验MySQL
1.
技术分享图片
2.检查环境变量path,是否已经存在MySQL的bin路径
 
MySQL目录结构
技术分享图片
 
MySQL配置文件:
技术分享图片
 
[client]
# pipe
# socket=0.0
port=3306    #MySQL默认端口号
[mysql]
no-beep
default-character-set=utf8    #默认编码格式
 
[mysqld]
# The next three options are mutually exclusive to SERVER_PORT below.
# skip-networking
# enable-named-pipe
# shared-memory
# shared-memory-base-name=MYSQL
# The Pipe the MySQL Server will use
# socket=MYSQL
# The TCP/IP Port the MySQL Server will listen on
port=3306
# Path to installation directory. All paths are usually resolved relative to this.
# basedir="C:/Program Files/MySQL/MySQL Server 5.7/"    #安装目录
# Path to the database root
datadir=C:/ProgramData/MySQL/MySQL Server 5.7\Data    #数据文件存储目录
# The default character set that will be used when a new schema or table is
# created and no character set is defined
character-set-server=utf8    #在当前服务器上存储的编码格式
# The default storage engine that will be used when create new tables when
default-storage-engine=INNODB
# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
# Enable Windows Authentication
# plugin-load=authentication_windows.dll
 
MySQL的启动/关闭(默认开启Windows自动启动服务)
1.在计算机管理-服务中,图形化操作
2.dos命令行:
    停止MySQL服务    net stop mysql
    启动MySQL服务    net start mysql
 
dos命令行操作MySQL
输出MySQL版本信息    mysql -V
登录MySQL    mysql -uroot -p
技术分享图片
退出MySQL
技术分享图片
 
修改MySQL提示符(prompt)
1.登录MySQL服务时,通过参数指定
    mysql -uroot -proot --prompt  提示符
    技术分享图片
2.登录MySQL以后,通过prompt命令修改
    prompt  提示符
    技术分享图片      
3.提示符的参数可以有哪些
    技术分享图片

MySQL常用命令:
SELECT VERSION();:显示当前服务器版本
SELECT NOW();:显示当前日期时间
SELECT USER();:显示当前用户
 
MySQL语句的规范:
关键字和函数名称全部大写
数据库、表、字段名称 全部小写
SQL语句必须以分号结尾

创建数据库:
CREATE DATABASE user;
查看当前MySQL中所有的数据库列表:
SHOW DATABASES;
在客户端隐藏错误信息:IF NOT EXISTS
CREATE DATABASE IF NOT EXISTS user;(数据库user已存在情况下)
显示错误信息:
SHOW WARNINGS;
查看数据库创建时使用的指令(编码格式):
SHOW CREATE DATABASE user;
创建gbk编码格式的数据库:
CREATE DATABASE IF NOT EXISTS test CHARACTER SET gbk;
修改数据库的编码格式:
ALTER DATABASE test CHARACTER SET=utf8;
删除数据库:
DROP DATABASE test;


MySQL数据类型(整型,浮点型,日期时间型,字符型)
 
1 整型:
技术分享图片
2 浮点型:
技术分享图片
    double类型的存储范围将近是float类型的10倍
3 日期时间型:
技术分享图片
    date精确到某一日,datetime精确到时分秒,timestamp时间戳类型
4 字符型:
技术分享图片
    char固定字符长度,若没达到,空格补齐;varchar灵活字符长度

创建数据表:
    关系型数据库就是一张二维表格,由行(记录)和列(字段)组成。
    1.先打开数据库:USE test;
    2.查看当前被打开的数据库:SELECT DATABASE();
    3.查看当前数据库的所有表:SHOW TABLES;
        查看其它数据库的数据表:SHOW TABLES FROM mobile_scm;
    4.创建表:(UNSIGNED:无符号的,无正负之分的)
         CREATE TABLE emp(
name VARCHAR(20),
age TINYINT UNSIGNED,
salary FLOAT(8,2) UNSIGNED,
phone CHAR(11)
);

MySQL查看表结构:SHOW COLUMNS FROM emp;
+--------+---------------------+------+-----+---------+-------+
| Field  | Type                | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| name   | varchar(20)         | YES  |     | NULL    |      |
| age    | tinyint(3) unsigned | YES  |     | NULL    |      |
| salary | float(8,2) unsigned | YES  |     | NULL    |      |
| phone  | char(11)            | YES  |     | NULL    |      |
+--------+---------------------+------+-----+---------+-------+
向数据表中插入记录 INSERT:( INTO 可以省略)
    1 所有字段都赋值:INSERT INTO emp VALUES(‘Tom‘,21,8976.85,‘13638389438‘);
    2 给指定的字段赋值:INSERT emp(name,salary) VALUES(‘John‘,6788.63);
查看数据表的记录 SELECT:
    1 查询表中的所有字段:SELECT * FROM emp;
    2 查询表中指定的字段:SELECT name,salary FROM emp;

MySQL空值与非空:
技术分享图片
1.创建表tb1,username字段不为空,age字段允许为空
CREATE TABLE tb1(username VARCHAR(20) NOT NULL,age TINYINT UNSIGNED NULL);
 
 
2.查看表的数据结构
SHOW COLUMNS FROM tb1;
 
 
3.向tb1表中添加数据
INSERT tb1 VALUES(‘TOM‘,NULL); --正确
INSERT tb1 VALUES(‘‘,20); --正确
INSERT tb1 VALUES(NULL,20); --错误
 

 
MySQL自动编号(主键自增):AUTO_INCREMENT
自动编号,必须与主键组合使用
默认情况,起始值为1,每次的增量为1
    1.创建一个主键自增的数据表tb2:CREATE TABLE tb2(id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,username VARCHAR(20) NOT NULL);
    2.查看表的数据结构:SHOW COLUMNS FROM tb2;
    3.为部分字段赋值:INSERT tb2(username) VALUES(‘Tom‘);
                    INSERT tb2(username) VALUES(‘John‘);
    4.主键自增不用手动赋值
 
技术分享图片
 
MySQL主键约束:PRIMARY KEY
主键保证记录的唯一性
主键自动为NOT NULL
每张数据表只能有一个主键

在不设定主键自增的情况下,主键约束的字段可以赋值,但不可重复
 
 
MySQL唯一约束:UNIQUE KEY
唯一约束可以保证记录的唯一性
唯一约束的字段可以为 NULL
每张数据表可以存在多个唯一约束

创建id为主键自增,username为唯一约束的数据表:
    CREATE TABLE tb3(id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,username VARCHAR(20) NOT NULL UNIQUE KEY,age TINYINT UNSIGNED);
    INSERT tb3(username,age) VALUES(‘Tom‘,22); --正确
    INSERT tb3(username,age) VALUES(‘Tom‘,25); --错误
 
 
MySQL默认约束:DEFAULT
1.当插入数据时,如果没有明确为字段赋值,则会自动赋予默认值
 
创建性别为默认约束的数据表:
    CREATE TABLE tb4(id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,username VARCHAR(20) NOT NULL UNIQUE KEY,sex ENUM(‘1‘,‘2‘,‘3‘)        DEFAULT ‘3‘);
 
   技术分享图片
 
MySQL外键约束:FOREIGN KEY 
    1. 保持数据的一致性,完整性
    2. 实现一对一 或 一对多 关系
    3. 外键约束的要求:
        3.1 父表(子表参照的表)和子表(具有外键列的表)必须使用相同的存储引擎,并且禁止使用临时表
        3.2 数据表的存储引擎只能为InnoDB
        3.3 外键列和参照列必须有相似的数据类型,其中数字的长度 或 是否有符号位 必须相同.而字符的长度可以不同.
        3.4 外键列和参照列必须创建索引,如果外键不存在索引,MySQL将自动创建索引.参照列不存在索引,MySQL不会创建索引.
    4. 编写数据表默认的存储引擎:
        MySQL配置文件:技术分享图片  
             default-storage-engine=INNODB(默认的存储引擎就是INNODB)
     5. 创建两张数据表
            5.1    父表:
  CREATE TABLE provinces(id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,pname VARCHAR(20) NOT NULL);    --省份数据表
  SHOW CREATE DATABASE provinces;    --查看数据库创建时使用的指令

    5.2    子表:

  CREATE TABLE users(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20) NOT NULL,pid BIGINT,FOREIGN KEY (pid) REFERENCES provinces (id));        --用户数据表,外键关联省份表(报错,不满足 外键约束的要求:数字的长度必须相同)

  CREATE TABLE users(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20) NOT NULL,pid SMALLINT,FOREIGN KEY (pid) REFERENCES provinces (id));   
     --用户数据表,外键关联省份表(报错,不满足 外键约束的要求:是否有符号位必须相同)
  CREATE TABLE users(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20) NOT NULL,pid SMALLINT UNSIGNED,FOREIGN KEY (pid)       REFERENCES provinces (id));   
     --用户数据表,外键关联省份表(正确,满足外键约束的要求)

   5.3    创建表是否存在索引:(主键在创建时,自动创建索引)  

  SHOW INDEXES FROM provinces;    --显示索引
  SHOW INDEXES FROM provinces\G;    --显示索引,以列表形式呈现
 
     6. 外键约束的参照操作
6-1.    CASCADE:从父表删除或更新 且 自动删除或更新子表中匹配的列
CREATE TABLE user1(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20) NOT NULL,pid SMALLINT UNSIGNED,FOREIGN KEY (pid) REFERENCES provinces (id) ON DELETE CASCADE);
DELETE FROM provinces WHERE id=2;
 
技术分享图片
 
mysql> SELECT * FROM user1;
+----+----------+------+
| id | username | pid  |
+----+----------+------+
|  1 | Tom      |    2 |
|  3 | John     |    1 |
|  4 | Rose     |    2 |
+----+----------+------+
3 rows in set (0.00 sec)

mysql> DELETE FROM provinces WHERE id=2;
Query OK, 1 row affected (0.02 sec)

mysql> SELECT * FROM user1;
+----+----------+------+
| id | username | pid  |
+----+----------+------+
|  3 | John     |    1 |
+----+----------+------+
1 row in set (0.00 sec)

mysql> SELECT * FROM provinces;
+----+-------+
| id | pname |
+----+-------+
|  1 | A     |
|  3 | C     |
+----+-------+
2 rows in set (0.00 sec)

mysql>
 
 
6-2.    SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL.如果使用该选项,必须保证子表列没有指定NOT NULL.
6-3.    RESTRICT:拒绝对父表的删除或更新操作
6-4.    NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同
 


MySQL的表级约束和列级约束
1. 对一个数据列建立的约束,称为列级约束
2. 对多个数据列建立的约束,称为表级约束
3. 列级约束既可以在列定义时声明,也可以在列定义后声明;表级约束只能在列定义后声明。
注:NOT NULL,DEFAULT 只有列级约束; PRIMARY KEY,UNIQUE KEY,FOREIGN KEY 都可存在表级 或 列级 约束

数据表的修改操作 
技术分享图片
 
1. 添加单列(可以指定位置关系)
    ALTER TABLE user1 ADD age TINYINT UNSIGNED NOT NULL DEFAULT 10;        --默认添加到所有列之后
    ALTER TABLE user1 ADD passwd VARCHAR(32) NOT NULL AFTER username;        --确定添加到username之后
    ALTER TABLE user1 ADD truename VARCHAR(20) NOT NULL FIRST;            --添加到所有列的前面
 
2.添加多列(不能指定位置关系,只能在所有列的后面添加)
ALTER TABLE table_name ADD Column1 varchar(50), ADD Column2 varchar(50), ADD Column3 varchar(50);
 
3.删除列
ALTER TABLE table_name DROP Column_name;
ALTER TABLE table_name DROP Column1,DROP Column2;
 
4.添加多个索引
ALTER TABLE  table_name ADD INDEX idx1 ( `func`), ADD INDEX idx2 ( `func`,`gene`), ADD INDEX idx3( `genedetail`); 
 
5.添加主键约束(CONSTRAINT约束)
ALTER TABLE user2 ADD CONSTRAINT PK_user2_id PRIMARY KEY (id);    --id字段添加主键约束,主键名为:PK_user2_id
注:主键约束只能添加一个字段
 
  删除主键约束(任何数据表有且只有一个主键,不需要指定字段名)
ALTER TABLE table_name DROP PRIMARY KEY;
 
6.添加唯一约束(CONSTRAINT可以省略不写)
ALTER TABLE user2 ADD UNIQUE (username);    --username字段添加唯一约束
注:唯一约束可以添加多个
 
  删除唯一约束(索引(一张数据表可以有多个唯一约束)
SHOW INDEXES FROM user2\G;    --查看表中所有索引
ALTER TABLE table_name DROP INDEX/KEY index_name;    --删除约束(索引)
 
7.添加外键约束
ALTER TABLE user2 ADD FOREIGN KEY (pid) REFERENCES provinces (id);    --pid字段 添加外键约束
 
  删除外键约束
SHOW CREATE DATABASE user2;    --查看数据库创建时使用的指令
ALTER TABLE table_name DROP FOREIGN KEY foreign_key_name;
 
8.添加/删除默认约束(literal字段的约束值)
ALTER TABLE table_name ALTER [COLUMN] Column_name SET DEFAULT literal;
ALTER TABLE table_name ALTER [COLUMN] Column_name DROP DEFAULT;

 
修改列定义(MODIFY Column_name
ALTER TABLE user2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;    --①把id字段修改放在首位
SHOW COLUMNS FROM user2;    --②查看数据表结构

ALTER TABLE user2 MODIFY id TINYINT UNSIGNED NOT NULL;    --修改数据类型
注:大范围向小范围 修改数据类型,可能会造成数据的丢失;

修改列名称(CHANGE Column_name)--可以修改列名称,也能修改列定义
ALTER TABLE table_name CHANGE old_Column_name new_Column_name ...;
例:ALTER TABLE user2 CHANGE pid p_id TINYINT UNSIGNED NOT NULL;
 
数据表更名
方法1:ALTER TABLE table_name [TO/AS] RENAME new_table_name;
方法2:RENAME TABLE table_name TO new_table_name [,table_name2 TO new_table_name2];
 
注:::数据表和列,不要轻易更改,避免导致视图或存储过程无法正常工作
 


 
 

 

MySQL基础进阶

标签:art   sql外键   3.4   rest   精确   padding   数据表   声明   mysql5.7   

原文地址:https://www.cnblogs.com/lcs-java/p/8465129.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!