MySQL使用详解--根据个人学习总结

 

 

1.安装配置

2.启动mysql服务并配置

    mysql> \s(status也行)
                      查看当前服务器状态
                      查看编码状态
        Server characterset : utf8
        Db characterset: utf8
        Client characterset: gbk
        Conn. characterset: gbk
        修改:---进入配置文件my.ini
        客户端:
            [mysql]
            default-character-set=utf8
        服务端:
            [mysqld]
            character-set-server=utf8
查看状态和修改配置

3.登陆/退出MySql

    登陆:
        常用参数:
        -u, --username=name用户名(注:5.5版本去掉了--username写法)
        -p, 密码
        -h, --host服务器名称
        -P, --port端口号
        -D, --database, 打开指定数据库
        --prompt=name, 设置命令提示符
        --delimiter=name, 指定分隔符
        -V,--version,输出版本信息并且退出
        案例:
        a)mysql -rroot -p
        b)mysql -h127.0.0.1 -uroot -p
        c)mysql -h127.0.0.1 -uroot -p --prompt=abc (只对当前连接有效)
        d)mysql -uroot -proot -V
登陆
    退出:
        exit
        quit
        \q
        Ctrl + c
退出

4.Mysql常用命令:

    显示当前版本 SELECT VERSION();
    显示当前日期时间 SELECT NOW();
    显示当前用户 SELECT USER();
    修改分隔符 DELIMITER \
    开启输出日志 \T +路径
    结束输出日志 \t
运维常用命令
	MYSQL语句规范:
	1.关键字与函数名称全部大写
	2.数据库名称,表名称,字段名称等全部小写
	3.SQL语句必须以分隔符结尾
	4.SQL语句支持折行操作,只要不把单词,标记或引号字符分割为两部分,可以在下一行继续写
	5.数据库名称,表名称,字段名称等尽量不要使用MySQL的保留字,如果需要使用的时候
		需要使用反引号('')将名称括起来

5.数据库操作:

    a)创建数据库:CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [[DEFAULT] CHARACTER SET [=] CHARSET_NAME]
                    CREATE DATABASE test CHARACTER SET=UTF8
    b)查看当前服务器下的数据列表: SHOW {DATABASES | SCHEMA}
      得到当前打开的数据库名称 : SELECT DATABASE();
    c)查看上一步操作产生的警告信息: SHOW WARNINGS;


    d)删除指定数据库 DROP {DATABASE|SCHEMA} [IF EXISTS] db_name   
                案例:DROP DATABASE db_aaa1
                      SHOW DATABASES
    e)查看指定数据库的定义 : SHOW CREATE {DATAASE|SCHEMA} db_name
     f)修改指定数据库的编码方式:ALTER {DATABASE|SCHEMA} db_name [DEFAULT]     CHARACTER SET[=] charset_name
    g)打开指定数据库: USE db_name
创建等语句

6.Mysql中的数据类型  --具体常用的可以参考

    整数类型  --int  --TINYINT(1),0为false,其余为true
    浮点类型  --FLOAT 4字节
    字符串类型--CHAR(M)  M 个字节,0<=M<=255  | VARCHAR(m) 0<=M<=65535 L+1个字节  | ENUM('value1','value2'..)1或两个字节,取决于枚举值的个数最多65535个值
    日期时间类型 time date datetime  year TIMESTAEP
    二进制类型 视频格式,图片路径啊等
bit[(M)]
            二进制位(101001),m表示二进制位的长度(1-64),默认m=1

        tinyint[(m)] [unsigned] [zerofill]

            小整数,数据类型用于保存一些范围的整数数值范围:
            有符号:
                -128127.
            无符号:
                0255

            特别的: MySQL中无布尔值,使用tinyint(1)构造。

        int[(m)][unsigned][zerofill]

            整数,数据类型用于保存一些范围的整数数值范围:
                有符号:
                    -21474836482147483647
                无符号:
                    04294967295

            特别的:整数类型中的m仅用于显示,对存储范围无限制。例如: int(5),当插入数据2时,select 时数据显示为: 00002

        bigint[(m)][unsigned][zerofill]
            大整数,数据类型用于保存一些范围的整数数值范围:
                有符号:
                    -92233720368547758089223372036854775807
                无符号:
                    018446744073709551615

        decimal[(m[,d])] [unsigned] [zerofill]
            准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。

            特别的:对于精确数值计算时需要用此类型
                   decaimal能够存储精确值的原因在于其内部按照字符串存储。

        FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
            单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
                无符号:
                    -3.402823466E+38 to -1.175494351E-38,
                    0
                    1.175494351E-38 to 3.402823466E+38
                有符号:
                    0
                    1.175494351E-38 to 3.402823466E+38

            **** 数值越大,越不准确 ****

        DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
            双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。

                无符号:
                    -1.7976931348623157E+308 to -2.2250738585072014E-308
                    0
                    2.2250738585072014E-308 to 1.7976931348623157E+308
                有符号:
                    0
                    2.2250738585072014E-308 to 1.7976931348623157E+308
            **** 数值越大,越不准确 ****


        char (m)
            char数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中m代表字符串的长度。
            PS: 即使数据小于m长度,也会占用m长度
        varchar(m)
            varchars数据类型用于变长的字符串,可以包含最多达255个字符。其中m代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。

            注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡

        text
            text数据类型用于保存变长的大字符串,可以组多到65535 (2**161)个字符。

        mediumtext
            A TEXT column with a maximum length of 16,777,215 (2**241) characters.

        longtext
            A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**321) characters.


        enum
            枚举类型,
            An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.)
            示例:
                CREATE TABLE shirts (
                    name VARCHAR(40),
                    size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
                );
                INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');

        set
            集合类型
            A SET column can have a maximum of 64 distinct members.
            示例:
                CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
                INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

        DATE
            YYYY-MM-DD(1000-01-01/9999-12-31)

        TIME
            HH:MM:SS('-838:59:59'/'838:59:59')

        YEAR
            YYYY(1901/2155)

        DATETIME

            YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)

        TIMESTAMP

            YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)
完整版数据类型

7.(一)数据库表相关操作

a.什么是表?

1         数据表是数据库最重要的组成部分之一,是其他对象的基础
2         数据表是存储数据的数据结构
3         数据表示包含了特定实体类别的数据
4         数据表由行(row)和列(column)构成的二维网络
5         数据表一定现有表结构,再有数据
6         数据表至少有一列,可以没有行或者多行
7         数据表名称要求唯一,而且不要包含特殊字符

b.如何创建数据表?

1         CREATE TABLE [IF NOT EXISTS] tbl_name(字段名称 字段类型 [完整性约束条件]。。。)ENGINE=引擎名称 CHARSET='编码方式'2         完整性约束条件:
3                         1.PRIMARY KEY主键v--唯一的字段,且不能重复
4                         2.AUTO_INCREMENT自增长
5                         3.FOREIGN KEY 外键
6                         4.NOT NULL 非空
7                         5.UNIQUE KEY 唯一
8                         6.DEFAULT默认值

c.如何查看数据库中的数据表以及表结构?

1 查看数据库下的数据表: SHOW TABLES
2 查看指定表的表结构:
3 DESC tbl_name
4 DESCRIBE tbl_name
5 SHOW COLUMNS FROM tbl_name

d.创建表

案例一:创建新闻分类cms_cate 编号,分类名称,分类描述

后加:注意一个地方:create table ....(id int,caption chr注意这里写完就没有逗号了)。。。;否则报错,大爷的找了一晚上。

1 CREATE TABLE IF NOT EXISTS cms_cate(
2 id TINYINT,
3 cateName VARCHAR(50),
4 cateDesc VARCHAR(200),
5 )ENGINE=MyISAM CHARSET=UTF8;
代码

案例二:
创建新闻表cms_news
编号,新闻标题,新闻内容,新闻发布时间,点击量,是否置顶,新闻所属分类,发布人

1 CREATE TABLE Persons
2 (
3 Id_P int NOT NULL,
4 LastName varchar(255) NOT NULL,
5 FirstName varchar(255),
6 Address varchar(255),
7 City varchar(255),
8 UNIQUE (Id_P)
9 );
代码一
1 CREATE TABLE IF NOT EXISTS cms_testnews(
2 id INT PRIMARY KEY,
3 title VARCHAR(50)  unique not null,
4 content TEXT  not null,
5 pubTime INT unique not null,
6 isTop TINYINT(1) COMMENT '0代表不置顶,1代表置顶' 
7 ) ENGINE=InnoDB CHARSET=UTF8;
代码二

7.(二)MySQL 存储引擎

a.什么是存储引擎?

1         存储引擎就是指表的类型。数据库的存储类型决定了表在计算机中的存储方式。用户可以根据不同的存储方式、是否
2         进行事务处理等来选择合适的存储引擎

b.如何查看MySQL的存储引擎?

1         查看MySQL支持的存储引擎:       SHOW ENGINES \G;
2                         Engine:存储引擎
3                         Support:是否支持这种存储引擎
4                         Comment:引擎特点
5                         Transactions:是否支持事务处理
6                         XA:是否是分布式的交易处理
7                         Savepoints:是否支持保存点
8         查看显示支持的存储引擎信息:    SHOW VARIABLES LIKE 'have%'
9         查看默认的存储引擎:            SHOW VARIABLES LIKE 'storage_engine'

c.MySQL常用存储引擎及特点

1                             InnoDB存储引擎  --5.1版本之后
2                                             事务修改:---进入配置文件my,回滚,修复,分布式,多版本并发控制的事物安全
3 
4                             MyISAM存储引擎  --5.1版本之前
5                                             frm --存储表结构
6                                             myd     --存储数据
7                                             myi --存储索引
8                             MEMORY存储引擎    
9                                             数据存储在内存,安全性低,速度快,生命周期短

d.如何选择合适的存储引擎?

       ---建议根据需求来选择存储引擎

完整性约束条件:

1、给字段选择合适的类型
PRI代表主键 不能为空, 一个表中只能有一个主键

查看创建表的定义
SHOW CREATE TABLE user1;

2、AUTO_INCREMENT自增长
被标志成自增长的一定是主键,主键不一定是自增长的

CREATE TABLE IF NOT EXISTS user5(
id SMALLINT KEY AUTO_INCREMENT,
username VARCHAR(20)
    );  --)AUTO_INCREMENT=100;指定起始值increment(自增长)
INSERT user5 VALUES(1,'KING');

  由于是自增长,可以换种写法

INSERT user5(username) VALUES('QUEN');

 

3、NOT NULL非空 --经常配合默认值使用

无符号的UNSIGEND(unsigned)
CREATE TABLE IF NOT EXISTS user7(
id INT UNSIGNED KEY AUTO_INCREMENT, 意思id是无符号的自增长的键
username VARCHAR(20) NOT NULL,
password CHAR(32) NOT NULL,
age TINYINT UNSIGNED
    );

INSERT user7(username, passwprd) VALUES('KING', 'KING');
INSERT user7(username, passwprd, age) VALUES('KING', 'KING', 12);
INSERT user7(username, passwprd) VALUES(NULL, 'KING');
实例

4.DEFAULT默认值

CREATE TABLE IF NOT EXISTS user7(
id INT UNSIGNED KEY AUTO_INCREMENT, 意思id是无符号的自增长的键
username VARCHAR(20) NOT NULL,
password CHAR(32) NOT NULL,
age TINYINT UNSIGNED DEFAULT 18
    );
案例

5.UNIQUE KEY 唯一(一个表中只能有一个主键,但可以有多个唯一)

CREATE TABLE IF NOT EXISTS user9(
id TINYINT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL UNIQUE,
card CHAR(18) UNIQUE
    )

DESC user9 ;
案例

6.外键(后面讲-配合多表查询)

外键,一个特殊的索引,只能是指定内容

可以理解为如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的。

            creat table color(
                nid int not null primary key,
                name char(16) not null
            )

            create table fruit(
                nid int not null primary key,
                smt char(32) null ,
                color_id int not null,
                constraint fk_cc foreign key (color_id) references color(nid)
            )
案例

如何操作表结构

修改表名:ALTER TABLE tbl_name RENAME [TO|AS] NEW_NAME
        RENAME TABLE tbl_name TO new_name

添加字段:ALTER TABLE tbl_name ADD 字段名称 字段类型【完整性约束条件】[FIRST|AFTER字段名称]
删除字段:ALTER TABLE tbl_name DROP 字段名称
修改字段属性:ALTER TABLE tbl_name MODIFY 字段名称 字段类型【完整性约束条件】【FIRST|AFTER 字段名称】
修改字段名称:ALTER TABLE tbl_name CHANGE 旧字段名称 新字段名称字段类型[完整性约束条件]【FIRST|AFTER字段名称】
添加默认值:ALTER TABLE tbl_name ALTER 字段名称SET DEFAULT默认值
删除默认值:ALTER TABLE tbl_name ALTER 字段名称 DFOP DEFAULT 
添加主键:ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY[index_type] (字段名称,...)
删除主键:ALTER TABLE tbl_name DROP PRIMARY KEY
添加唯一:ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] UNIQUE [INDEX|KEY] [索引名称](字段名称,..)
删除唯一:ALTER TABLE tbl_name DROP {INDEX|KEY} index_name
修改表的存储引擎:ALTER TABLE tbl_name ENGING=存储引擎名称 
设置自增长的值:ALTER TABLE tbl_name AUTO_INCREMENT=5.如何删除数据表
DROP TABLE[IF EXISTS] tbl_name[,tbl_name....]

 

CREATE TABLE IF NOT EXISTS user10(
id SMALLINT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL UNIQUE,
password CHAR(32) NOT NULL,
email VARCHAR(50) NOT NULL DEFAULT '12344@qq.com',

    );

添加字段

以user10为例
添加card字段CHAR(18);
ALTER TABLE user10 ADD card CHAR(18);
查看表结构:DESC user10;
完整性约束条件: 
ALTER TABLE user10 ADD test VARCHAR(100) NOT NULL UNIQUE;
ALTER TABLE user10 ADD test1 VARCHAR(100) NOT NULL FIRST;
ALTER TABLE user10 ADD test2 VARCHAR(100) NOT NULL DEFAULT 100 AFTER username;
选中一次表,完成多个操作
ALTER GTABLE user10
ADD test4 INT NOT NULL DEFAULT 123 AFTER password,
ADD test5 FLOAT(6,2) FIRST,
ADD test6 SET('A','B','C');
查看表结构:DESC user10;
案例

删除email字段

 

ALTER TABLE user10 DROP test6;
ALTER TABLE user10 DROP test1;

DESC user10;

一次删除多个字段
ALTER TABLE user10
DROP test2,
DROP test3,
....;
案例

添加test字段删除addr字段

ALTER TABLE user10
ADD test  INT UNSIGNED NOT NULL DEFAULT 10 AFTER sex,
DROP addr;
案例

修改字段属性

ALTER TABLE uer10 MODIFY email VARCHAR(200);--修改的是所有属性,没写的会变回默认
所以建议在改之前要先DESC tbl_name;查看一下表结构

添加默认值

CREATE TABEL IF NOT EXISTS test12(
id TINYINT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL UNIQUE,
age TINYINT UNSIGNED
    );

 

添加默认值:
ALTER TABLE user11 ALTER age SET DEFAULT 18; 
DESC user11;
ALTER TABLE user11 ALTER age DROP DEFAULT;
ALTER TABLE user11 ALTER username DROP DEFAULT;
案例

如何添加主键

CREATE TABLE IF NOT EXISTS test12(
id INT
    );
ALTER TABLE test12 ADD PRIMARY KEY(id);
案例

 

CREATE TABLE IF NOT EXISTS test13(
id INT,
card CHAR(18),
username VARCHAR(20) NOT NULL
    );
ALTER TABLE test13 ADD PRIMARY KEY(id, card);
案例

删除test12表的主键

ALTER TABLE test12 DROP PRIMARY KEY;
在添加回来
ALTER TABLE test12 ADD CONSTRAINT symbol PRIMARY KEY index_type(id);
案例

----注意:

带有主键的自增长---删除
CREATE TABLE IF NOT EXISTS test14(
id INT UNSIGNED KEY AUTO_INCREMENT
    );

ALTER TABLE test14 DROP PRIMARY KEY; ---会报错;所以先删除自增长
所以:
ALTER TABLE test14 MODIFY id INT UNSIGNED;利用MODIFY关键字去掉了特殊属性;(就是利用修改属性,没修改的变成默认值)
ALTER TABLE test14 DROP PRIMARY KEY;

修改表的存储引擎
修改表的存储引擎为MyISAM;

ALTER TABLE user12 ENGINE=MyISAM;
修改自增长的值
ALTER TABLE user12 AUTO_INCREMENT=100;

删除数据表

DROP TABLE[IF EXISTS] tbl_name[, tbl_name...]

DROP TABLE IF EXISTS user12;
SHOW WARNINGS;  查看警告
DROP TABLE IF EXISTS user1,user2,user3;
View Code

 

清空自增id

我们的数据库表中经常会使用id自增,但是每次清空表后id并不是从1开始计数,总是接着之前的进行自增,那么解决呢?

使用mysql的truncate命令,用法:truncate table 表名;

posted @ 2016-06-24 10:07  我当道士那儿些年  阅读(755)  评论(0编辑  收藏  举报