MySQL学习笔记——〇一

摘要:
MySQL文件和Excel文件可以这样描述:数据库--工作簿xlsx文件表--工作表文件操作创建文件createDatabasedbname;表操作创建表createtabletablename删除表droptabletablename视图表属性destablename;查看表格创建代码showcreatetablenameshowcreatetablenameG下一条语句中的G是在终端显示异常时垂直显示内容。MySQL主键约束是列或列的组合,其值可以唯一地标识表中的每一行。这样的一个或多个列称为表的主键,通过它可以实现表的实体完整性。

这里不讲MySQL的原理和连接的方法了,就讲一下如何对数据库进行操作。

用户操作

创建用户

创建用户的方法:我们可以用下面的代码进行用户的创建

create user 'username'@'ip' identified by 'password';

在上面的代码中,表示创建了用户名为username的用户,用户登录ip限制为ip,密码为password。

ip内可以用百分号来表示区间:

192.168.0.%    ip区段为192.168.0.0-255

或者直接用%来表示所有的ip地址。

权限管理

常用权限

在创建完用户以后需要对该用户进行权限管理,先看看有哪些权限是常用的

MySQL学习笔记——〇一第1张MySQL学习笔记——〇一第2张
            select          仅查权限
            select,insert   查和插入权限
            ...
            usage                   无访问权限
            alter                   使用alter table
            alter routine           使用alter procedure和drop procedure
            create                  使用create table
            create routine          使用create procedure
            create temporary tables 使用create temporary tables
            create user             使用create user、drop user、rename user和revoke  all privileges
            create view             使用create view
            delete                  使用delete
            drop                    使用drop table
            execute                 使用call和存储过程
            file                    使用select into outfile 和 load data infile
            grant option            使用grant 和 revoke
            index                   使用index
            insert                  使用insert
            lock tables             使用lock table
            process                 使用show full processlist
            select                  使用select
            show databases          使用show databases
            show view               使用show view
            update                  使用update
            reload                  使用flush
            shutdown                使用mysqladmin shutdown(关闭MySQL)
            super                   使用change master、kill、logs、purge、master和set global。还允许mysqladmi调试登陆
            replication client      服务器位置的访问
            replication slave       由复制从属使用
常用权限

授权

我们可以将上面的权限赋给新创建的用户

grant privileges on dagabasename.tablename to 'username'@'host'

上面的语句就是把某项权限授权给指定地址的指定用户

移除权限

我们还可以把已授的权撤回

revoke privileges on dagabasename.tablename from 'username'@'host'

就是把授权的两个关键字grant和to改成revoke和from

删除用户

删除用户的方法

drop user 'username'@'host'

修改用户

rename user 'username'@'host1' to 'newname'@'host2'

修改密码

set passowrd for 'username'@'host' = pwd
文件操作

在这里我们把数据库类比成一个Excel文件,在这个文件里存了各个数据,那么, 都有哪些操作呢?

 MySQL学习笔记——〇一第3张

 MySQL文件和Excel的文件我们可以这样来说明

database  ——  工作簿xlsx文件

table      ——  Sheet

文件操作(database)

创建文件

create database dbname;

Sheet操作(table)

创建表

create table tablename(
列1 数据类型,
列2 数据类型
)

删除表

drop table tablename

查看表属性

desc tablename;

查看表创建代码

show create table tablename
show create table tablename G

下面一条语句中的G是在终端显示异常(宽度和table宽度不匹配)的时候使内容竖着显示。

清除表内容

 清除表内容有两种方法

delete from tablename;
truncate table name;

两种方法都可以清楚table里的内容,最大的区别就是如果表初始化的时候如果使用了自增的选项,用delete清除后添加数据是接着原有的序号继续添加的,而用truncate是彻底清除,添加数据是从头开始添加。

内容操作(增删改查)

插入数据(insert)

insert it tablename(列名1,列名2) values(值1,值2)

查看数据(select)

select 列名 from tablename

 改数据(update)

update tablename set 列名=值
update tablename set 列名=值 where condition

删除数据

delete from tablename where condition;

主键Primary Key

“主键(PRIMARY KEY)”的完整称呼是“主键约束”。MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。

主键可以在创建表的时候声明

create table t1(ID int primary key,
                        name char(10));

也可以在表创建以后将某一列设置为主键(设置的时候该列的数据不能有重复的)

alter table tableneme add primary key(列名);

要注意一点:一个表里只能有一列主键,但主键不一定必须是一列数据(也可以是多列一起构成一个主键),那么该怎么定义呢?比方我们有个table,里面把id1和id2设置为主键,代码如下

create table t1(id1 int not NUll,
                id2 int not Null,
                name char(5),
                primary key(id1,id2));

就是用primary key来设置两个列,这个方式不太常用,知道有这么个用法就可以了。

总之,就是一个表只能有一个主键,而主键可以有多列组成

自增auto_increment

一般我们对主键是设置一个自增的

create table t1(di not null primary key auto_increment,
    name char(10));

自增步长

MySQL的步长设置是基于会话的(一次会话可以简单的理解为一次登录)

set session auto_increment_increment=2
set session auto_increment_offset = 10    设置起始值

但是同一个表在不同的登录端是可以设置成不同的步长的(同时启动两个终端都可以实现),相当于内存中的一个全局变量。

查看当前会话中自增步长

show session variables like 'auto_inc%');

全局级别自增设置

set global session auto_increment_increment=2
set global session auto_increment_offset = 10    设置起始值

而在sqlserver的自增步长是基于表级别的,就是说我们把他的步长定了以后不管在什么时候使用的步长是一致的。

auto_increment也是表格的一个重要的属性,每次添加新的数据以后,这个值都会发生改变,变成下一次要使用的数值。

但是如果在向表内添加了5组数据后,删除了三个,只剩下id为1和2两组数据,这时候我们再重新填数的时候新的id就成了6,这时候就修改表格的auto_increment属性

alter table tablename auto_increment=3;

那么再添加数据的时候,自增的数就是从指定的3开始。

接下来的事情

基于上面的方法我们用下面的代码添加一个新的数据库文件并且使用这个库文件

create database db1;
use db1;
createt table t1(id int,name char(10))

这时候我们插入一个新的数据,但是把值设置成中文

insert into t1(id,name) values(1,'张三')

敲回车,看看是不是报错了

Incorrect string value: 'xD5xC5xC8xFD' for column 'name' at row 1

因为我们在创建database或者table的时候没有对编码进行定义,怎么解决呢?

create database dbname default charset utf8

或者在创建表的时候定义好

create table tablename default charset utf8
MySQL事务

这时候就要简单的引出来一个新的概念——事务,比方我们有个操作:一个database里两个table是两个人的账户,有这样的一个操作:转账,把table1里的账户扣掉多少加到table2里,这就是一个事务。如果这个操作是有一定耗时的,但是在操作的时候死机或掉电了,那么是不是重启服务的时候就会出现数据的异常,这样就引出来事务的第几个特性:

原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性:再失误开始和结束以后,数据库的完整性没有被破坏,也就是说写入的资料必须完全符合所有的预设规则,包含资料的准确性、串联性以及后续数据库可以自发的完成预定的工作

隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

MySQL引擎

数据库引擎是用于存储、处理和保存数据的核心服务,不同的引擎的特点是不同的。MySQL的常用引擎有两种:InnoDB和MyIsam,其他的还有什么BlackHole和Memory啥的,这里主要简单的点一下前两种

InnoDB具体特点度娘上一查就有,但最大的一点就是事务型引擎,支持事务

MyIsam是不支持事务的,但是支持全局索引,实现快速的索引。

指定引擎

create table tablename(列名) engine=InnoDB;
数据类型

在创建表的时候我们都定义了列的数据类型,下面看看常用的数据类型有哪些

数字类型

整形数据

整形数据分为int,tinnyint和bigint不同的类型表示的数据范围不同

浮点数据

  浮点类型的数据大致分两种,下面的m值数据总长度,而n指的是小数位数。

  一种是float(m,n)和double(m,n),这种的精度是比较差的。

  另一种是decimal(m,n)。底层存储方式有些类似字符串所以精度要高于上一种。

时间

下面是常用的几种事件类型的数据关键字和其对应的格式

DATE——YYYY-MM-DD

TIME——HH:MM:SS

DATETIME——YYYY-MM-DD HH:MM:SS

TIMESTAP YYYYMMDD HHMMSS

字符串

字符串的格式有两种:char(m)和varchar(m),一种是固定长度,一种是可变长度(最大值都为255)。可变长度的比较节省空间,而定常度的比较减少索引的时间。

而较大的数据有几种格式分别如下,不一样的长度

text,2**16-1

mediumtext 2**24-1

longtext 2**32-1

而其实超过一定长度的数据已经不适合放在数据库内了,一般较大的文件(比方上传个图像、音频什么的)都是把文件上传在服务器内,而数据库里只保存文件路径URL。

枚举型数据

常用的枚举型数据也大概分两种

ENUM

ENMU用来指定唯一的选项,比方说性别、尺寸什么的,举个例子,表格里寸放了某种衣服的货号(id),尺寸(size),和数量(num),尺寸就是从XL到XS,就这几种选项

create table t1(id int,
                sie ENMU('XL','L','M','S','XS'),
                num int)

这样我们在以后插入数据的时候就只能选择上面的几种尺寸了。如果输入的数据不对就会报错。

SET

SET实现了多选项的枚举,举个例子,一盒笔,里面可能有红的,或是蓝的或黑的,我们要统计数量所以,第一列是ID,第二列是数量Num,第三列是都有颜色

create table(ID int,
                Num int,
                Cor SET('red','blue','black')
外键FOREIGN KEY

外键的概念

最后我们来看看外键的使用

假设我们有db下两个表,t1如下

MySQL学习笔记——〇一第4张

 但是有个问题,如果部门那一列如果字数太多,并且人数非常多的话,这个数据库是比较冗余的,一般我们就会另外建立一个表2

MySQL学习笔记——〇一第5张

 那么,我们把这两个表关联起来做一个约束,也就是说t1里的departmen列的数据t只能是t2里的ID列的数据,在t1里只用存储t2里的ID就可以了,然后这么做有两点好处:

1.大大的降低了存储的开支

2.减少了脏数据出现的概率,如果没有关联的话,用户一旦输入了一个失效的数据(没有的部门),是无法提示的,这个方式起码保证t1输入的是t2内已经存在的数据。

那么t2的ID就是t1的外键(表的外键是另一表的主键, 外键可以有重复的, 可以是空值)。

外键的使用

还是用上面那个例子,我们把他用代码来描述一遍

create table userinfo(
                    ID int auto_increment primary key,
                    name varchar(32),
                    department_id int.
                    constraint fk_user_depar foreign key('department_id',) references departmentinfo('id')
                    )engine=innodb default charset=utf8
                    
create table departmentinfo(id int auto_increment primary key,
                            department_name varchar(32)
                            )engine=innodb default charset=utf8

 注意几点:

1.我们在定义外键的时候constraint fk_user_depar foreign key('department_id',) references departmentinfo('id'),第一个键用了个括号,是因为如果被约束的主键是一个大于1 的列的话,是可以用两个列来约束的

constraint fk_t1_t2 foreign key (id1,id2) references t1(t1id1,t1id2);

2.我们声明外键的时候,fk_t1_t2这个名字是不能重复的,我们在起名的时候可以直接用表和表来命名(t1_t2)这样的。

免责声明:文章转载自《MySQL学习笔记——〇一》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇消息中间件ActiveMQ使用详解zookeeper单机集群搭建下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux+Apache+MySQL+PHP5的安装与配置与phpBB2论坛的架设

在现在的网络应用中,Linux+Apache+MySQL+PHP已经成为一个重要的组合应用了.在这里我们以PHP5为例谈一下Linux+Apache+MySQL+PHP5的安装与配置.在经过这样的工作以后我们就可以用phpBB2来架设我们自己的论坛了.1 安装MySQLMySQL可以从htt://www.mysql.org处下载得到.解压后入其目录,我们可...

MySQL之级联删除、级联更新、级联置空

1. 准备测试表 # 专业表major create table major(id int primary key auto_increment, mmane varchar(20))engine=innodb default charset=utf8; # 学生表mstudent create table mstudent(id int primar...

mysql基本认识【关系型数据库和nosql、mysql操作流程和体系,库操作,表操作,数据的操作,字符集的操作,以及php作为client操作数据库】对连接本身没有疑问

1.关系型数据库永久性保存数据的仓库php的变量只是php脚本执行期间,临时性保存变量的空间【使用内存空间临时保存】 关系型数据库:利用二者的关系来描述实体的信息。【利用二维表字段名和字段值来进行描述】【关系型数据库根本不是可以使用外键将两个表构建成关联的意思,而是实现描述实体的二维表的形式】 nosql:not only sql【sql表示操作关系型数据...

DBCC命令汇总

引用了链接:http://bbs.chinaunix.net/thread-2315221-1-1.html IF (OBJECT_ID('#tmpDBCC04') IS NOT NULL)     DROP TABLE #tmpDBCC04 GO CREATE TABLE #tmpDBCC04 (      CurrentLSN Varchar(200)...

MySQL 主从同步(5)-同步延迟状态考量(seconds_behind_master和pt-heartbea)

一般情况下,我们是通过"show slave status G;"提供的Seconds_Behind_Master值来衡量mysql主从同步的延迟情况。具体说明见:mysql主从同步(4)-Slave延迟状态监控,这种方法在大多数情况下确实是可行的。但是经验告诉我,仅仅依靠Seconds_Behind_Master的值来监测主从同步数据是否延迟是绝对不可靠...

SQLServer中的事物与锁

了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器。 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写。 死锁:是数据库性能的重量级杀手之一,而死锁却是不同事务之间抢占数据资源造成的。 不懂的听上去,挺神奇的,懂的感觉我在扯淡,下面带你好好领略下他们的风采,嗅査下他们的...