关于MYSQL

安装MYSQL:
//安装mysql服务端:
sudo apt-get install mysql-server
//安装mysql客户端:
sudo apt-get install mysql-client
//安装mysql的C语言开发接口:
sudo apt-get install libmysqlclient-dev
MYSQL的基本命令:
  • 启动mysql:
service mysql start

![2018-08-15 14-13-49 的屏幕截图](/home/lala/图片/2018-08-15 14-13-49 的屏幕截图.png)

![2018-08-15 14-13-37 的屏幕截图](/home/lala/图片/2018-08-15 14-13-37 的屏幕截图.png)

  • 登录mysql数据库:
sudo mysql -uroot -p
sudo:切换到root用户下
-p:输入密码
-P:默认端口号 3306

![2018-08-15 14-16-12 的屏幕截图](/home/lala/图片/2018-08-15 14-16-12 的屏幕截图.png)

  • 显示当前所有数据库:
show databases;
//切记一定要加入;表示这句话结束了
//这里的databases是复数!!!

![2018-08-15 14-18-30 的屏幕截图](/home/lala/图片/2018-08-15 14-18-30 的屏幕截图.png)

  • 选择数据库:
use 数据库名;
//一定要使用完再添加东西!!!

![2018-08-15 14-20-34 的屏幕截图](/home/lala/图片/2018-08-15 14-20-34 的屏幕截图.png)

  • 创建一个数据库:
create database 库名;

![2018-08-15 14-24-08 的屏幕截图](/home/lala/图片/2018-08-15 14-24-08 的屏幕截图.png)

  • 在某数据库中建一个表:
create table 表名(字段设定列表);

![2018-08-15 14-26-47 的屏幕截图](/home/lala/图片/2018-08-15 14-26-47 的屏幕截图.png)

  • 显示数据库中的表:
show tables;

![2018-08-15 14-28-02 的屏幕截图](/home/lala/图片/2018-08-15 14-28-02 的屏幕截图.png)

  • 显示数据表的结构:
describe 表名;
show columns from 表名;

![2018-08-15 14-29-07 的屏幕截图](/home/lala/图片/2018-08-15 14-29-07 的屏幕截图.png)

  • 插入数据到表中:
insert into table1(username,password) values('leizhimin','lavasoft');
commit;
table1:是我刚才建的一个表
username:表里面的其中一个字段
password:表里面的其中一个字段
values:后面括号里面的东西是添加的东西,和字段对应
commit:提交
SQL语言可以分为DDL,DML,DCL三大类。
提交数据有三种类型:显示提交(commit),隐式提交(SQL命令间接完成),自动提交(把AUTOCOMMIT设置为ON)
DDL语句是自带commit的,而执行DML命令如果没有提交,将不会被其他会话看到。除非在DML命令之后执行了DDL命令或DCL命令,或用户退出会话,或终止实例,此时系统会自动发出commit命令,使未提交的DML命令提交。另外,可以知道,查询是可以不带commit的。
  • 查询表:(对照一下之前的describe 含义是不一样的)
select * from 表名;

![2018-08-15 14-51-02 的屏幕截图](/home/lala/图片/2018-08-15 14-51-02 的屏幕截图.png)

  • 更改数据:
update table1 set password='hahahaha' where username='lalala';
commit;
table1:表名
password:要改数据的字段名称
'hahahaha':要更改的数据
username:要改数据的信息(这里是名称)
'lalala':要改数据的信息字段的名称

![2018-08-15 15-03-37 的屏幕截图](/home/lala/图片/2018-08-15 15-03-37 的屏幕截图.png)

  • 给表添加字段:
//添加一个字段(一列)
alter table 表名 add column 添加的字段名称 类型;
//添加多个字段(多列)
alter table 表名 add column 添加的字段名称 类型,add column 添加的字段名称 类型;

![2018-08-15 15-25-12 的屏幕截图](/home/lala/图片/2018-08-15 15-25-12 的屏幕截图.png)

![2018-08-15 15-26-34 的屏幕截图](/home/lala/图片/2018-08-15 15-26-34 的屏幕截图.png)

  • 删除数据:
delete from table1 where username='lalala';
commit;

![2018-08-15 15-12-58 的屏幕截图](/home/lala/图片/2018-08-15 15-12-58 的屏幕截图.png)

  • 删除表:
drop table 表名;

![2018-08-15 14-31-55 的屏幕截图](/home/lala/图片/2018-08-15 14-31-55 的屏幕截图.png)

  • 删除数据库;
drop database name;

![2018-08-15 14-32-57 的屏幕截图](/home/lala/图片/2018-08-15 14-32-57 的屏幕截图.png)

  • 退出:
exit

![2018-08-15 14-36-29 的屏幕截图](/home/lala/图片/2018-08-15 14-36-29 的屏幕截图.png)

  • 查询时间:
select now();

![2018-08-15 15-29-32 的屏幕截图](/home/lala/图片/2018-08-15 15-29-32 的屏幕截图.png)

  • 查询用户:
select user();

![2018-08-15 15-30-18 的屏幕截图](/home/lala/图片/2018-08-15 15-30-18 的屏幕截图.png)

  • 查询当前使用的数据库:
select database();

![2018-08-15 15-31-14 的屏幕截图](/home/lala/图片/2018-08-15 15-31-14 的屏幕截图.png)

  • 有的时候安装MYSQL的时候系统自动给你分配了一个账号和密码,所以你有时候conect中的用户名不是root,密码也不是你进去的那个,所以就要查看一下密码和账号:
//切记一定是在终端下运行!!!不是在mysql内!!

sudo vim /etc/mysql/debian.cnf //查看
sudo cat /etc/mysql/debian.cnf //打印

![2018-08-15 19-52-17 的屏幕截图](/home/lala/图片/2018-08-15 19-52-17 的屏幕截图.png)

如果账号密码写的是之前我以为的就会这样:

![2018-08-15 19-53-21 的屏幕截图](/home/lala/图片/2018-08-15 19-53-21 的屏幕截图.png)

![2018-08-15 19-53-03 的屏幕截图](/home/lala/图片/2018-08-15 19-53-03 的屏幕截图.png)

改过之后:

![2018-08-15 19-54-36 的屏幕截图](/home/lala/图片/2018-08-15 19-54-36 的屏幕截图.png)

![2018-08-15 19-54-48 的屏幕截图](/home/lala/图片/2018-08-15 19-54-48 的屏幕截图.png)

  • 添加字段:
alter table 表名 Add column 字段的名称(新建的) 类型 ... AFTER 字段(已经有的);
//这句话意思是在哪个字段后面添加
eg:
alter table student Add column id int not NULL default 0 AFTER no;

![2018-08-15 21-57-56 的屏幕截图](/home/lala/图片/2018-08-15 21-57-56 的屏幕截图.png)

  • 删除字段:
alter table 表名 drop column 字段;

![2018-08-15 21-59-34 的屏幕截图](/home/lala/图片/2018-08-15 21-59-34 的屏幕截图.png)

  • 调整字段顺序:
alter table 表名 change 想要换的字段名 想要换的字段名 当时创建自断的时候给他的特性全写 after 被换的字段名;
eg:
alter table studnet change s_name s_name char(20) after no;

![2018-08-15 22-05-11 的屏幕截图](/home/lala/图片/2018-08-15 22-05-11 的屏幕截图.png)

  • 遇到的问题:

我将一个字段设置为auto_increment,但是程序会报错,错误原因是:

![2018-08-15 22-19-11 的屏幕截图](/home/lala/图片/2018-08-15 22-19-11 的屏幕截图.png)

注意:

1.自增字段必须是primary key!

2.出错的地方在这:

![2018-08-15 22-20-44 的屏幕截图](/home/lala/图片/2018-08-15 22-20-44 的屏幕截图.png)

改为:

![2018-08-15 22-21-49 的屏幕截图](/home/lala/图片/2018-08-15 22-21-49 的屏幕截图.png)

结果为:

![2018-08-15 22-22-14 的屏幕截图](/home/lala/图片/2018-08-15 22-22-14 的屏幕截图.png)

//主键 
alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);
//增加一个新列
alter table t2 add d timestamp;
alter table infos add ex tinyint not null default '0';
//删除列
alter table t2 drop column c;
//重命名列
alter table t1 change a b integer;
//改变列的类型
alter table t1 change b b bigint not null;
alter table infos change list list tinyint not null default '0';
//重命名表
alter table t1 rename t2;
加索引
mysql> alter table tablename change depno depno int(5) not null;
mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);
mysql> alter table tablename add index emp_name (name);
加主关键字的索引
mysql> alter table tablename add primary key(id);
加唯一限制条件的索引
mysql> alter table tablename add unique emp_name2(cardnumber);
删除某个索引
mysql>alter table tablename drop index emp_name;
修改表:
增加字段:
mysql> ALTER TABLE table_name ADD field_name field_type;
修改原字段名称及类型:
mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;
删除字段:
mysql> ALTER TABLE table_name DROP field_name;