数据库
数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合。数据库中的数据按一定的数学模型组织、描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种用户共享。
数据库管理系统软件
mysql
mysql的管理
安装
linux:
--yum -y install mariadb mariadb-server OR --yum -y install mysql mysql-server
win:
--http://dev.mysql.com/downloads/mysql/
启动
--service mysqld start #开启 --chkconfig mysqld on #设置开机自启 OR --systemctl start mariadb --systemctl enable mariadb
查看
-- ps aux |grep mysqld #查看进程 -- netstat -an |grep 3306 #查看端口
设置密码
-- mysqladmin -uroot password \'123\' #设置初始密码,初始密码为空因此-p选项没有用 -- mysqladmin -u root -p123 password \'1234\' #修改root用户密码
登录
-- mysql #本地登录,默认用户root,空密码,用户为root@127.0.0.1 -- mysql -uroot -p1234 #本地登录,指定用户名和密码,用户为root@127.0.0.1 -- mysql -uroot -p1234 -h 192.168.31.95 #远程登录,用户为root@192.168.31.95
mysql的常用命令
-- -- 启动mysql服务与停止mysql服务命令: -- -- net start mysql -- net stop mysql -- -- -- 登陆与退出命令: -- -- mysql -h 服务器IP -P 端口号 -u 用户名 -p 密码 --prompt 命令提示符 --delimiter 指定分隔符 -- mysql -h 127.0.0.1 -P 3306 -uroot -p123 -- quit------exit----\\q; -- -- -- \\s; ------my.ini文件:[mysql] default-character-set=gbk [mysqld] character-set-server=gbk -- -- prompt 命令提示符(\\D:当前日期 \\d:当前数据库 \\u:当前用户) -- -- \\T(开始日志) \\t(结束日志) -- -- show warnings; -- -- help() ? \\h -- -- \\G; -- -- select now(); -- select version(); -- select user; -- -- \\c 取消命令 -- -- delimiter 指定分隔符
忘记密码怎么办?
方法1:启动mysql时,跳过授权表
[root@controller ~]# service mysqld stop [root@controller ~]# mysqld_safe --skip-grant-table & [root@controller ~]# mysql mysql> select user,host,password from mysql.user; +----------+-----------------------+-------------------------------------------+ | user | host | password | +----------+-----------------------+-------------------------------------------+ | root | localhost | *A4B6157319038724E3560894F7F932C8886EBFCF | | root | localhost.localdomain | | | root | 127.0.0.1 | | | root | ::1 | | | | localhost | | | | localhost.localdomain | | | root | % | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | +----------+-----------------------+-------------------------------------------+ mysql> update mysql.user set password=password("123") where user="root" and host="localhost"; mysql> flush privileges; mysql> exit [root@controller ~]# service mysqld restart [root@controller ~]# mysql -uroot -p123
方法2(删库):
删除与权限相关的库mysql,所有的授权信息都丢失,主要用于测试数据库或者刚刚建库不久没有授权数据的情况(从删库到跑路) [root@controller ~]# rm -rf /var/lib/mysql/mysql [root@controller ~]# service mysqld restart [root@controller ~]# mysql
sql及其规范
数据库操作(DDL)
-- 1.创建数据库(在磁盘上创建一个对应的文件夹) create database [if not exists] db_name [character set xxx]-- 2.查看数据库
show databases;查看所有数据库
show create database db_name; 查看数据库的创建方式-- 3.修改数据库
alter database db_name [character set xxx]-- 4.删除数据库
drop database [if exists] db_name;-- 5.使用数据库
切换数据库 use db_name; -- 注意:进入到某个数据库后没办法再退回之前状态,但可以通过use进行切换
查看当前使用的数据库 select database();
mysql数据类型
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
数值类型
下面的表显示了需要的每个整数类型的存储和范围。
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。
BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。
数据表操作
基础操作
-- 1.创建表(类似于一个excel表)<span style="color: #0000ff;">create</span> <span style="color: #0000ff;">table</span><span style="color: #000000;"> tab_name( field1 type</span><span style="color: #ff0000;">[</span><span style="color: #ff0000;">完整性约束条件</span><span style="color: #ff0000;">]</span><span style="color: #000000;">, field2 type, ... fieldn type )</span><span style="color: #ff0000;">[</span><span style="color: #ff0000;">character set xxx</span><span style="color: #ff0000;">]</span><span style="color: #000000;">; </span><span style="color: #008080;">--</span><span style="color: #008080;"> 创建一个员工表employee</span> <span style="color: #0000ff;">create</span> <span style="color: #0000ff;">table</span><span style="color: #000000;"> employee( id </span><span style="color: #0000ff;">int</span> <span style="color: #0000ff;">primary</span> <span style="color: #0000ff;">key</span><span style="color: #000000;"> auto_increment , name </span><span style="color: #0000ff;">varchar</span>(<span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">), gender </span><span style="color: #0000ff;">bit</span> <span style="color: #0000ff;">default</span> <span style="color: #800000; font-weight: bold;">1</span>, <span style="color: #008080;">--</span><span style="color: #008080;"> gender char(1) default 1 ----- 或者 TINYINT(1) </span>
birthday date,
entry_date date,
job varchar(20),
salary double(4,2) unsigned,
resume text -- 注意,这里作为最后一个字段不加逗号
);</span><span style="color: #008080;">/*</span><span style="color: #008080;"> 约束: primary key (非空且唯一) :能够唯一区分出当前记录的字段称为主键! unique not null auto_increment 主键字段必须是数字类型。 外键约束 foreign key </span><span style="color: #008080;">*/</span>
-- 2.查看表信息
desc tab_name 查看表结构
show columns from tab_name 查看表结构
show tables 查看当前数据库中的所有的表
show create table tab_name 查看当前数据库表建表语句-- 3.修改表结构
-- (1)增加列(字段)
alter table tab_name add [column] 列名 类型[完整性约束条件][first|after 字段名];
alter table user add addr varchar(20) not null unique first/after username;
#添加多个字段
alter table users2
add addr varchar(20),
add age int first,
add birth varchar(20) after name;-- (2)修改一列类型
alter table tab_name modify 列名 类型 [完整性约束条件][first|after 字段名];
alter table users2 modify age tinyint default 20;
alter table users2 modify age int after id;-- (3)修改列名
alter table tab_name change [column] 列名 新列名 类型 [完整性约束条件][first|after 字段名];
alter table users2 change age Age int default 28 first;-- (4)删除一列
alter table tab_name drop [column] 列名;
-- 思考:删除多列呢?删一个填一个呢?
alter table users2
add salary float(6,2) unsigned not null after name,
drop addr;-- (5)修改表名
rename table 表名 to 新表名;
-- (6)修该表所用的字符集
alter table student character set utf8;-- 4.删除表
drop table tab_name;---5 添加主键,删除主键
alter table tab_name add primary key(字段名称,...)
alter table users drop primary key;eg: mysql</span><span style="color: #808080;">></span> <span style="color: #0000ff;">create</span> <span style="color: #0000ff;">table</span> test5(num <span style="color: #0000ff;">int</span><span style="color: #000000;"> auto_increment); ERROR </span><span style="color: #800000; font-weight: bold;">1075</span> (<span style="color: #800000; font-weight: bold;">42000</span>): Incorrect <span style="color: #0000ff;">table</span> definition; there can be <span style="color: #0000ff;">only</span> one auto <span style="color: #0000ff;">column</span> <span style="color: #808080;">and</span> it must be defined <span style="color: #0000ff;">as</span> a <span style="color: #0000ff;">key</span> <span style="color: #0000ff;">create</span> <span style="color: #0000ff;">table</span> test(num <span style="color: #0000ff;">int</span> <span style="color: #0000ff;">primary</span> <span style="color: #0000ff;">key</span><span style="color: #000000;"> auto_increment); </span><span style="color: #008080;">--</span><span style="color: #008080;"> 思考,如何删除主键?</span> <span style="color: #0000ff;">alter</span> <span style="color: #0000ff;">table</span> test modify id <span style="color: #0000ff;">int</span>; <span style="color: #008080;">--</span><span style="color: #008080;"> auto_increment没了,但这样写主键依然存在,所以还要加上下面这句</span> <span style="color: #0000ff;">alter</span> <span style="color: #0000ff;">table</span> test <span style="color: #0000ff;">drop</span> <span style="color: #0000ff;">primary</span> <span style="color: #0000ff;">key</span>;<span style="color: #008080;">--</span><span style="color: #008080;"> 仅仅用这句也无法直接删除主键</span>
-- 唯一索引
alter table tab_name add unique [index|key] [索引名称](字段名称,...)</span><span style="color: #0000ff;">alter</span> <span style="color: #0000ff;">table</span> users <span style="color: #0000ff;">add</span> <span style="color: #0000ff;">unique</span>(name)<span style="color: #008080;">--</span><span style="color: #008080;"> 索引值默认为字段名show create table users;</span> <span style="color: #0000ff;">alter</span> <span style="color: #0000ff;">table</span> users <span style="color: #0000ff;">add</span> <span style="color: #0000ff;">unique</span> <span style="color: #0000ff;">key</span> <span style="color: #ff00ff;">user_name</span>(name);<span style="color: #008080;">--</span><span style="color: #008080;"> 索引值为user_name</span> <span style="color: #008080;">--</span><span style="color: #008080;"> 添加联合索引</span> <span style="color: #0000ff;">alter</span> <span style="color: #0000ff;">table</span> users <span style="color: #0000ff;">add</span> <span style="color: #0000ff;">unique</span> <span style="color: #0000ff;">index</span> name_age(name,age);#show <span style="color: #0000ff;">create</span> <span style="color: #0000ff;">table</span><span style="color: #000000;"> users; </span><span style="color: #008080;">--</span><span style="color: #008080;"> 删除唯一索引</span> <span style="color: #0000ff;">alter</span> <span style="color: #0000ff;">table</span> tab_name <span style="color: #0000ff;">drop</span> {<span style="color: #0000ff;">index</span><span style="color: #808080;">|</span><span style="color: #0000ff;">key</span>} index_name</pre>
创建文章表
create table article( id int primary key auto_increment , title varchar(20), publish_date INT, click_num INT, is_top TINYINT(1), content TEXT );
完整性约束条件之主键约束
单字段主键
主键字段特点:非空且唯一
create table users( id INT primary key, name varchar(20), city varchar(20) );
多字段联合主键
create table users2( id INT, name varchar(20), city varchar(20), primary key(name,id) );
<1> 一张表只能有一个主键
<2> 主键类型不一定非是整型
表纪录操作
表纪录之增,删,改
-- 1.增加一条记录insert<span style="color: #008080;">/*</span><span style="color: #008080;">insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......);</span><span style="color: #008080;">*/</span> <span style="color: #0000ff;">create</span> <span style="color: #0000ff;">table</span><span style="color: #000000;"> employee_new( id </span><span style="color: #0000ff;">int</span> <span style="color: #0000ff;">primary</span> <span style="color: #0000ff;">key</span><span style="color: #000000;"> auto_increment, name </span><span style="color: #0000ff;">varchar</span>(<span style="color: #800000; font-weight: bold;">20</span>) <span style="color: #808080;">not</span> <span style="color: #0000ff;">null</span> <span style="color: #0000ff;">unique</span><span style="color: #000000;">, birthday </span><span style="color: #0000ff;">varchar</span>(<span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">),<br> salary float(7,2) ); </span><span style="color: #0000ff;">insert</span> <span style="color: #0000ff;">into</span> employee_new (id,name,birthday,salary) <span style="color: #0000ff;">values</span><span style="color: #000000;"> (</span><span style="color: #800000; font-weight: bold;">1</span>,<span style="color: #ff0000;">\'yuan</span><span style="color: #ff0000;">\'</span>,<span style="color: #ff0000;">\'</span><span style="color: #ff0000;">1990-09-09</span><span style="color: #ff0000;">\',9000</span><span style="color: #000000;">); </span><span style="color: #0000ff;">insert</span> <span style="color: #0000ff;">into</span> employee_new <span style="color: #0000ff;">values</span><span style="color: #000000;"> (</span><span style="color: #800000; font-weight: bold;">2</span>,<span style="color: #ff0000;">\'</span><span style="color: #ff0000;">alex</span><span style="color: #ff0000;">\'</span>,<span style="color: #ff0000;">\'</span><span style="color: #ff0000;">1989-08-08</span><span style="color: #ff0000;">\',3000</span><span style="color: #000000;">); </span><span style="color: #0000ff;">insert</span> <span style="color: #0000ff;">into</span> employee_new (name,salary) <span style="color: #0000ff;">values</span><span style="color: #000000;"> (\'xialv\',1000); </span><span style="color: #008080;">--</span><span style="color: #008080;"> 插入多条数据</span> <span style="color: #0000ff;">insert</span> <span style="color: #0000ff;">into</span> employee_new <span style="color: #0000ff;">values</span><span style="color: #000000;"> (4</span>,<span style="color: #ff0000;">\'</span><span style="color: #ff0000;">alvin1</span><span style="color: #ff0000;">\'</span>,<span style="color: #ff0000;">\'</span><span style="color: #ff0000;">1993-04-20</span><span style="color: #ff0000;">\',3000</span><span style="color: #000000;">), (5</span>,<span style="color: #ff0000;">\'</span><span style="color: #ff0000;">alvin2</span><span style="color: #ff0000;">\'</span>,<span style="color: #ff0000;">\'</span><span style="color: #ff0000;">1995-05-12</span><span style="color: #ff0000;">\',5000</span><span style="color: #000000;">); </span><span style="color: #008080;">--</span><span style="color: #008080;"> set插入: insert [into] tab_name set 字段名=值</span> <span style="color: #0000ff;">insert</span> <span style="color: #0000ff;">into</span> employee_new <span style="color: #0000ff;">set</span> id<span style="color: #808080;">=12</span>,name<span style="color: #808080;">=</span><span style="color: #000000;">"alvin3";
-- 2.修改表记录 update tab_name set field1=value1,field2=value2,......[where 语句]
<span style="color: #008080;">/*</span><span style="color: #008080;"> UPDATE语法可以用新值更新原有表行中的各列。 SET子句指示要修改哪些列和要给予哪些值。 WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。</span><span style="color: #008080;">*/</span> <span style="color: #0000ff;">update</span> employee_new <span style="color: #0000ff;">set</span> birthday<span style="color: #808080;">=</span>"1989-10-24" <span style="color: #0000ff;">WHERE</span> id<span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">; </span><span style="color: #008080;">--</span><span style="color: #008080;">- 将yuan的薪水在原有基础上增加1000元。</span> <span style="color: #0000ff;">update</span> employee_new <span style="color: #0000ff;">set</span> salary<span style="color: #808080;">=</span>salary<span style="color: #808080;">+</span><span style="color: #800000; font-weight: bold;">4000</span> <span style="color: #0000ff;">where</span> name<span style="color: #808080;">=</span><span style="color: #ff0000;">\'</span><span style="color: #ff0000;">yuan</span><span style="color: #ff0000;">\'</span><span style="color: #000000;">;
-- 3.删除表纪录
<span style="color: #0000ff;">delete</span> <span style="color: #0000ff;">from</span> tab_name <span style="color: #ff0000;">[</span><span style="color: #ff0000;">where ....</span><span style="color: #ff0000;">]</span> <span style="color: #008080;">/*</span><span style="color: #008080;"> 如果不跟where语句则删除整张表中的数据 delete只能用来删除一行记录 delete语句只能删除表中的内容,不能删除表本身,想要删除表,用drop TRUNCATE TABLE也可以删除表中的所有数据,词语句首先摧毁表,再新建表。此种方式删除的数据不能在 事务中恢复。</span><span style="color: #008080;">*/</span> <span style="color: #008080;">--</span><span style="color: #008080;"> 删除表中名称为’alex’的记录。</span> <span style="color: #0000ff;">delete</span> <span style="color: #0000ff;">from</span> employee_new <span style="color: #0000ff;">where</span> name<span style="color: #808080;">=</span><span style="color: #ff0000;">\'</span><span style="color: #ff0000;">alex</span><span style="color: #ff0000;">\'</span><span style="color: #000000;">; </span><span style="color: #008080;">--</span><span style="color: #008080;"> 删除表中所有记录。</span> <span style="color: #0000ff;">delete</span> <span style="color: #0000ff;">from</span> employee_new;<span style="color: #008080;">--</span><span style="color: #008080;"> 注意auto_increment没有被重置:alter table employee auto_increment=1;</span> <span style="color: #008080;">--</span><span style="color: #008080;"> 使用truncate删除表中记录。</span> <span style="color: #0000ff;">truncate</span> <span style="color: #0000ff;">table</span> emp_new;</pre>
思考:
<1> 存储时间用varchar可不可以呢?它与date数据类型又有什么区别呢?
<2> 表中数据三条,id分别为1,2,3,突然插入一个id=7,那么下次作为主键的字增长的id会从几开始增长呢?(从7开始)
表纪录之查(单表查询)
-- 查询表达式SELECT *|field1,filed2 ... FROM tab_name
WHERE 条件
GROUP BY field
HAVING 筛选
ORDER BY field
LIMIT 限制条数---准备表
CREATE TABLE ExamResult(
id INT PRIMARY KEY auto_increment,
name VARCHAR (20),
JS DOUBLE ,
Django DOUBLE ,
OpenStack DOUBLE
);INSERT INTO ExamResult VALUES (1,"yuan",98,98,98),
(2,"xialv",35,98,67),
(3,"alex",59,59,62),
(4,"wusir",88,89,82),
(5,"alvin",88,98,67),
(6,"yuan",86,100,55);-- (1)select [distinct] |field1,field2,...... from tab_name
-- 其中from指定从哪张表筛选,表示查找所有列,也可以指定一个列
-- 表明确指定要查找的列,distinct用来剔除重复行。<span style="color: #008080;">--</span><span style="color: #008080;"> 查询表中所有学生的信息。</span> <span style="color: #0000ff;">select</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">from</span><span style="color: #000000;"> ExamResult; </span><span style="color: #008080;">--</span><span style="color: #008080;"> 查询表中所有学生的姓名和对应的英语成绩。</span> <span style="color: #0000ff;">select</span> name,JS <span style="color: #0000ff;">from</span><span style="color: #000000;">
以上是关于MYSQL基础的主要内容,如果未能解决你的问题,请参考以下文章
[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础
连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段
使用 json rereiver php mysql 在片段中填充列表视图
关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段