Mysql数据库

安装:http://www.cnblogs.com/hukey/p/6654285.html

Mysql安装后的设定:

安装后的设定:
(1) 为所有root用户设定密码;

mysql> SET PASSWORD
mysql> update mysql.user SET password=PASSWORD('your_pass') WHERE cluase;
或:mysqladmin -uroot -p password 你的密码

(2) 删除所有匿名用户

mysql> DROP USER ''@'localhost';

上述两步骤可运行命令:mysql_secure_installation

客户端程序:

客户端工具:
mysql: 交互式的CLI工具; mysqldump: 备份工具,基于mysql协议向mysqld发起查询请求,并将查得的所有数据转换成insert等写操作语句保存文本文件中; mysqladmin: 基于mysql协议管理mysqld; mysqlimport: 数据导入工具;

客户端类应用程序的可用选项:
-u, --user=
-h, --host=
-p, --passowrd=
-P, --port=
--protocol=
-S, --socket=
-D, --database=
-C, --compress

mysql -e "SQL"

脚本模式:
# mysql -uUSERNAME -hHOST -pPASSWORD < /path/from/somefile.sql
mysql> source /path/from/somefile.sql

 
 

数据库和表的创建:

常用管理命令:

desc table;     查看表结构
select *(或字段) from user\G;   查看表的内容,可读性
show create database;     查看创建数据库的类型
show grants for user;     查看用户的权限
show columns from user;   显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。
create database testdb charset "utf8";   创建一个叫testdb的数据库,且让其支持中文 
drop database testdb;   删除数据库
show index from user;   数据表:显示数据表的详细引信息,包括PRIMARY KEY(主键)。

一、数据库操作:

  1、显示数据库

1 SHOW DATABASES;

    默认数据库:
          mysql - 用户权限相关数据
      test - 用于用户测试数据
      information_schema - MySQL本身架构相关数据

  2、创建数据库

  # utf-8
  CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
 
  # gbk
  CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

  3、打开数据库

  USE db_name;
注:每次使用数据库必须打开相应数据库

显示当前使用的数据库中所有表:SHOW TABLES;

 4、用户管理

         用户操作:

创建用户
    create user '用户名'@'IP地址' identified by '密码';
删除用户
    drop user '用户名'@'IP地址';
修改用户
    rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';;
修改密码
    set password for '用户名'@'IP地址' = Password('新密码')
  
PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议) 

      权限设置:

show grants for '用户'@'IP地址'                  -- 查看权限
grant  权限 on 数据库.表 to   '用户'@'IP地址'      -- 授权
revoke 权限 on 数据库.表 from '用户'@'IP地址'      -- 取消权限
例:
grant all privileges on operation.* to 'root'@'%'  identified by 'P@ssw0rd';
all privileges  除grant外的所有权限
            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。还允许mysqladmin????调试登陆
            replication client      服务器位置的访问
            replication slave       由复制从属使用

对于权限设置
权限解释
对于目标数据库以及内部其他:
            数据库名.*           数据库中的所有
            数据库名.表          指定数据库中的某张表
            数据库名.存储过程     指定数据库中的存储过程
            *.*                所有数据库
数据库解释
            用户名@IP地址         用户只能在该IP下才能访问
            用户名@192.168.1.%   用户只能在该IP段下才能访问(通配符%表示任意)
            用户名@%             用户可以用任意IP下访问(默认IP地址为%)
IP地址解释

 5、数据库表的操作:

创建表:

语法:CREATE TABLE table_name (column_name column_type);

例:创建一个student表

create table student(
   stu_id INT NOT NULL AUTO_INCREMENT,
   name CHAR(32) NOT NULL,
   age  INT NOT NULL,
   register_date DATE,
   PRIMARY KEY ( stu_id )
);

AUTO_INCREMENT:自增
PRIMARY KEY:设置主键

数据类型:

数值型:
类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT
1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值 MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值 INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值 BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值 FLOAT 4 字节 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,
(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度,浮点数值 DOUBLE 8 字节 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,
(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度,浮点数值 DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值
日期和时间类型:表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
类型 大小(字节) 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2038
结束时间是第 2147483647 秒,
北京时间 2038-1-19 11:14:07,
格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYYMMDHHMMSS 混合日期和时间值,时间戳
字符串类型:指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
类型           大小                 用途
CHAR        0-255字节            定长字符串
VARCHAR     0-65535字节          变长字符串
TINYBLOB    0-255字节            不超过 255 个字符的二进制字符串
TINYTEXT    0-255字节            短文本字符串
BLOB        0-65 535字节         二进制形式的长文本数据
TEXT        0-65 535字节         长文本数据
MEDIUMBLOB  0-16 777 215字节     二进制形式的中等长度文本数据
MEDIUMTEXT  0-16 777 215字节     中等长度文本数据
LONGBLOB    0-4 294 967 295字节  二进制形式的极大文本数据
LONGTEXT    0-4 294 967 295字节  极大文本数据

 

插入表数据:

语法:INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );
例:插入数据
MariaDB [test_cheng]> insert into student(name,age,register_data) values ('cheng',23,'2016-03-22') ;

查询表数据:

语法:SELECT column_name,column_name
         FROM table_name
         [WHERE Clause]
         [OFFSET M ][LIMIT N]
1、查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
2、SELECT 命令可以读取一条或者多条记录。
3、你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
4、你可以使用 WHERE 语句来包含任何条件。
5、你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
6、你可以使用 LIMIT 属性来设定返回的记录数。
例:
MariaDB [test_cheng]> select stu_id from student limit 2;
MariaDB [test_cheng]> select stu_id from student limit 1 offset 2; 注:offset不能单独使用

where 语句:
语法:SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
例:
 select *  from student where name='cheng';

like 语句:
语法:
select * from tables where name like 'ale%' ale开头的所有(多个字符串)
例:
MariaDB [test_cheng]> select * from student where name like 'c%';

排序:
语法:SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
例:
select * from student order by stu_id desc; 注:从大到小

更改表数据:

语法:UPDATE table_name SET field1=new-value1, field2=new-value2
     [WHERE Clause]
例:
update student set name = 'chen' where name='cheng';

删除表数据:

语法:DELETE FROM table_name [WHERE Clause]
例: delete from student where name = 'chen';

分组统计:

语法:SELECT column_name, function(column_name)
     FROM table_name
     WHERE column_name operator value
     GROUP BY column_name;
例:MariaDB [test_cheng]> select name,count(*) from student group by name; 注:将数据表按名字进行分组,并统计每个人有多少条记录
MariaDB [test_cheng]> select name,sum(age) as count from student group by name with rollup; 注:年龄加在一起

ALTER命令:

我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令。

1、删除,添加或修改表字段
alter table student drop register_date;     #从student表删除register_date字段
alter table student add phone int(11) not null;    #添加phone字段

2、修改字段类型及名称
如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。

例如,把字段 c 的类型从 CHAR(1) 改为 CHAR(10),可以执行以下命令:
mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);

使用 CHANGE 子句, 语法有很大的不同。 在 CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型。尝试如下实例:

mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT; 
mysql> ALTER TABLE testalter_tbl CHANGE j j INT;
ALTER TABLE 对 Null 值和默认值的影响

3、当你修改字段时,你可以指定是否为空或者是否设置默认值。

以下实例,指定字段 j 为 NOT NULL 且默认值为100 。
mysql> ALTER TABLE testalter_tbl
    -> MODIFY j BIGINT NOT NULL DEFAULT 100;
修改表名:
mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

主键和外键:

1.创建表时候指定主键:
创建表user(id, username, age),并且id字段非空自增。
CREATE TABLE user( id BIGINT(20) NOT NULL AUTO_INCREMENT ,username VARCHAR(16) NOT NULL ,age TINYINT ,PRIMARY KEY(id));
2、插入三条数据:
insert into user (username,age) values(user1,19);
insert into user (username,age) values('user2',20);
insert into user (username,age) values('user3',21);
3、修改表中字段为主键
ALTER TABLE user ADD PRIMARY KEY(id), MODIFY id BIGINT(20) AUTO_INCREMENT;
3、删除主键(主键为自增,那么还需要将自增去掉):
ALTER TABLE user DROP PRIMARY KEY ,MODIFY id BIGINT(20);
4、创建表的时候创建外键:
CREATE TABLE article( id BIGINT(20) NOT NULL AUTO_INCREMENT ,u_id BIGINT(20) NOT NULL ,article_name VARCHAR(16) NOT NULL ,PRIMARY KEY(id) ,
CONSTRAINT fk_user_article_uid FOREIGN KEY (u_id) REFERENCES user(id) );
5、在表中增加外键(表中如果有记录就会出错):
ALTER TABLE article ADD CONSTRAINT fk_user_article_uid FOREIGN KEY(u_id) REFERENCES user(id);
6、删除外键:
ALTER TABLE article DROP FOREIGN KEY fk_user_article_uid;
7、插入数据:
insert into article (u_id,article_name) values (3,'user3');

 6、事务:

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

  • 在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务
  • 事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行
  • 事务用来管理insert,update,delete语句

一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)

  • 1、事务的原子性:一组事务,要么成功;要么撤回。
  • 2、稳定性 : 有非法数据(外键约束之类),事务撤回。
  • 3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
  • 4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。
在Mysql控制台使用事务来操作
begin; #开始一个事务
insert into a (a) values(555);
rollback; 回滚 , 这样数据是不会写入的

当然如果上面的数据没问题,就输入commit提交命令就行;

7、索引:

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。

创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。 

实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。

创建索引

这是最基本的索引,它没有任何限制。它有以下几种创建方式:

CREATE INDEX indexName ON mytable(username(length));  

如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。

 修改表结构

ALTER mytable ADD INDEX [indexName] ON (username(length))

创建表的时候直接指定

CREATE TABLE mytable( 
ID INT NOT NULL,  
username VARCHAR(16) NOT NULL, 
INDEX [indexName] (username(length)) 
); 

删除索引的语法

DROP INDEX [indexName] ON mytable;
唯一索引

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:

创建索引

创建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
修改表结构
ALTER mytable ADD UNIQUE [indexName] ON (username(length)) 
创建表的时候直接指定
CREATE TABLE mytable( 
ID INT NOT NULL,  
username VARCHAR(16) NOT NULL, 
UNIQUE [indexName] (username(length)) 
); 
使用ALTER 命令添加和删除索引
有四种方式来添加数据表的索引:
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。
 
以下实例为在表中添加索引。
mysql> ALTER TABLE testalter_tbl ADD INDEX (c);
你还可以在 ALTER 命令中使用 DROP 子句来删除索引。尝试以下实例删除索引:
mysql> ALTER TABLE testalter_tbl DROP INDEX (c);
使用 ALTER 命令添加和删除主键
主键只能作用于一个列上,添加主键索引时,你需要确保该主键默认不为空(NOT NULL)。实例如下:
mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
 
你也可以使用 ALTER 命令删除主键:
mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
删除指定时只需指定PRIMARY KEY,但在删除索引时,你必须知道索引名。
显示索引信息
SHOW INDEX FROM table_name\G

解决中文乱码:

1、使用show create table table_name 查看默认字符集。
2、使用alter更改字符集:
alter table table_name convert to character set utf8;
3、修改/etc/my.cnf文件:
[mysqld]
character-set-server=utf8
[client]
default_character_set=utf8

之前创建的数据库还是以前的,再创建表时还是默认的字符集,添加中文还是乱码。

 

转载于:https://www.cnblogs.com/chimeiwangliang/p/7161556.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值