'''
一、数据库管理系统DBMS
软件,
bin
config
db = 保存数据
- admin
-随机字符串 封装了【user,pwd,class】
- course
- school
main or src
写程序:
a:数据库在本地
1、找到目录
2、添加数据
3、找到数据
b:数据库在远程
1、socket连接上远程机器
2、cocket发送(命令) #add|数据名
做些什么????
a、
1 程序
程序 socket客户端
2 数据
socket_server
3 制作一套规则
add|增删改查
4 socket:server or client 用户认证 授权 限制
有人做了DBMS:(就是以上做了什么)
-- SqlServer(收费的)
-- oracle ,sqlite,access。。。
一般都在MySQL
Mysql:
server端 and client端
二,下载安装
1 下载
2 解压
3 服务器端运行起来
mysqld
4 客户端连接
net start mysql
net stop mysql
三、 mysql数据库:
1 概念
数据表,文件
数据行,文件中的一行数据
数据库,文件夹
2 mysql命令:
show databases; 查看当前mysql都有哪些数据,根目录都有哪些文件夹
create database; 创建库名,创建文件夹
use 数据库名; 使用选中数据库,进入目录
show tables; 查看当前数据库下都有哪些表
create table 表名(nid int,name 字符串varchar(20 最多20个,如有25 20后面的就扔了),
pwd varchar(64个字符));创建数据库表
select * from 表名‘; 查看表中的所有数据
insert into 表名(nid,name,pwd) values(1,'alex','123'); 插入数据
-- select * from 表名; 查看表中的所有数据
四、用户授权:
用户管理的时候有特殊命令:
创建用户:
create user '用户名'@'ip地址' identified by '密码';
删除用户:
drop user '用户名'@'ip地址';
修改用户:
rename user '用户名'@'ip地址' to ‘新用户名’@‘ip地址’;
修改密码:
set password for ‘用户名’@‘IP地址’ = Password(‘新密码’)
登录默认是local 如果是127.0.0.1 的话 需要在-u 后面加上 -t 127.0.0.1 -p 在输入密码登录
初试:
show databases; # 查看当前Mysql都有那些数据,根目录都有那些文件夹
create database 数据库名; # 创建文件夹
use 数据库名; # 使用选中数据库,进入目录
show tables; # 查看当前数据库下都有那些表,
create table 表名(nid int,name varchar(20), pwd varchar(64)); # 创建数据库表
select * from 表名; # 查看表中的所有数据
insert into 表名(nid,name,pwd) values(1,'alex','123'); # 插入数据
-- select * from 表名;
权限管理:
grant 权限 on 数据库,表 to ‘用户’@‘ip地址’ --授权 把这个数据库,表 的什么权限 赋给用户
select 查权限
数据库,表
test。tb1 只能查看
test。* test里的全部
*。* 全部
‘用户’@‘ip地址’
xiaohu@localhost
===================重要,远程连接=======================
a 解放双手 自己不用操作文件 直接将命令发送给mysql服务端 自动操作
b 数据库 表 行
c 开户,授权
没有特殊字符 不用加“”
推荐大家用“”
密码必须用“” 其他的推荐用
d 客户端连接(mysql提供的客户端)
1 mysql -u root -h192.168.1.1 -P 3306 -p
pwd:输入密码
2 show databases; 查看当前mysql都有哪些数据,根目录都有哪些文件夹
create database; 创建库名,创建文件夹
use 数据库名; 使用选中数据库,进入目录
show tables; 查看当前数据库下都有哪些表
create table 表名(nid int,name 字符串 varchar(20 最多20个,如有25 20后面的就扔了),
pwd varchar(64个字符));创建数据库表
select * from 表名‘; 查看表中的所有数据
insert into 表名(nid,name,pwd) values(1,'alex','123'); 插入数据
-- select * from 表名; 查看表中的所有数据
3 ;;;;;;;;;
五、sql语句:
数据库级别
show databases;
create database 数据库名称;
create database 数据库名称 default charset utf8 collate utf8_general_ci;
usr 数据库名称;
drop database 数据库名称
表级别
show tables;
desc tb1; 看数据库的基本结构
***create table tb1(nid int, name varchar(10)); 创建表
create table 表名(
列名 类型 是否可以为空,not null 不可以为空
列名 类型 是否可以为空 null 可以为空
)ENGINE=InnoDB DEFAULT CHARSET=utf8 设置引擎
InnoDB == 事务,原子操作 装逼
事务 就是 a加钱 b减钱 如果a,b 都完成 则事务成立 如果有一个未完成 则失败 返回原点 不加不减 回滚
默认值, 创建列时可以指定默认值,当插入数据时如果为主动设置 则自动添加默认值
create table tb1(
nid not int null default 2, 不能为空 为空有默认值
num int not null。 不能为空
)ENGINE=InnoDB DEFAULT CHARSET=utf8 设置引擎
****重要*****
自增:
create table tb1(
nid not int null auto_increment primary key, auto_increment自增
num int not null。
)ENGINE=InnoDB DEFAULT CHARSET=utf8
a 默认值
b 是否可以为空
c 自增列(一张表只能有一个自增列,数字,必须是索引-主键)
d 主键索引: 主键是跟别人不一样 主要的键
create table tb1(
nid not int null auto_increment primary key, primary key 主键索引
num int not null。
)ENGINE=InnoDB DEFAULT CHARSET=utf8
一张表只能有一个主键,也是自增的并且唯一的不能重复的并且不能为null,一般情况下,会将增列设置成主键
1,2,3,4,5,6,7
create table student(
#nid int not null auto_increment key, 不能为空 自增的一列数据
name varchar(10) not null,
num int not null,
age int,
gender int
primary key(name,num) 两列联合做主键 从约束的角度看
)NGINE=InnoDB DEFAULT CHARSET=utf8
约束:
name num age
a 88 9
a 99 9
a 88 0
主键:
不能null
不能重复
一张表只有个主键(可以多列组成主键)
一般用法:
#nid int not null auto_increment key 不能为空 自增的一列数据
唯一索引:
唯一列可以为null,一张表可以有多个唯一列
1,2,3,4,5,6,7,null
-- 约束
-- 都叫索引 查找速度都非常快
最后不能加逗号 否则报错
drop table tb1;删除表
delete from tb1; 清空表的内容
truncate table tb1;清空内容 有点不一样 性能高 速度快 可以从1开始
select * from tb1; 查询
数据行级别 *****重要
select * from tb1; 查询
外键:
创建外键
create table 表名;
nid 。。。。
name 。。。。
constraint fk_新建表名 foreign key 需要关联的表(列nid) references 和被关联的表(的列nid)
比如是公司部门用数字代替 如2 nid列的2 是公关部
--2是被(被关联表约束)
还可以直接创建外键 直接创建关联
create table 表名;
nid 。。。。
name 。。。。
constraint fk_新建表名 foreign key (列nid) references 和被关联的表(的列nid)
不用写需要关联的表 是因为建立的就是自己的列 只需要写上列即可
foreign key; 一个部门对多个员工
两张表建立约束,
防止脏数据的产生 约束
增加列
alter table 表名 add 列名 类型
删除列
alter table 表名 drop column 类型
修改列
alter table 表名 modify column 列名 类型, -- 类型
alter table 表名 change 原列名 新列名 类型, -- 列名,类型
添加主键
alter table 表名 add primary key(列名);
删除主键
alter table 表名 drop primary key;
alter table 表名 modify 列名 int,drop primary key;
添加外键
alter table 需要关联的表 add constraint 外键名称(形如fk_需要关联的表_被关联的表) foreign key 需要关联的表(列) references 被关联的表(列)
删除外键
alter table 表名 drop foreign 外键名称(形如fk_需要关联的表_被关联的表)
修改默认值就是给某个列增加默认值
ALTER TABLE testalter_tb1 ALTER i SET DEFAULT 1000;
这个表名 i=列名 等于1000
删除默认值
ALTER TABLE testalter_tb1 ALTER i DROP DEFAULT;
mysql 基本数据类型