Mac终端操作Mysql,以及Mysql的操作

首先手动启动Mysql应用程序

打开终端输入如下命令:  /usr/local/mysql/bin/mysql -u root -p

(注意:Windows下的是:  mysql -u root -p)

其中root为用户名。这时会出现如下命令:Enter password:  123456

这样就可以访问你的数据库服务器了。

                                     数据库操作

下面介绍一些关于从数据库创建到使用的一些简单的方法;

创建一个名字为mydatabase数据库: create database mydatabase ;

可以用以下地命令来查看创建的数据库是否成功: show databases ;

更改数据库名字 : alter databases  Hdatabase ;

更改数据库mydatabase的字符集 : alter database mydatabase charset GBK ;

进入数据库: use mydatabase ;

用下面的命令来查看该数据库中的表: show tables ;

                                表操作

用下面的命令来创建表:create table student (

                                      name varchar(10) , 

                                     gendervarchar(10) ,

                                     sno    int    primary key(id)

                                    )charset utf8;

用下面的命令来检查表的创建是否成功: show tables;

查看该表结构,表中字段的信息: desc 表名 ;        describe 表名;       show columns from  表名;

修改表名: rename命令用于修改表名。  rename命令格式:rename table 原表名 to 新表名;

                   alter  table  旧表名  rename  新表名;         alter table student  rename  my_student;

修改字段,字段操作很多:新增(add)、修改(modify)、重名(change)、删除(drop)

--给学生表增加ID放到第一个位置。                          altertable  表名  add  字段名  数据类型[位置];

alter  table my_student add  id int first;

---将学生表中的number学号字段变成固定长度,且放到第二位。   alter table 表名  modify  字段名  数据类型  [位置]; 

alter  table  my_student  modify  number  char(10)  after id;

---修改学生表中的gender字段为sex。alter table 表名  change  旧字段名  新字段名  数据类型 ;alter table my_student  change  gender  sex  varchar(10);

---删除学生表中的字段age。                                alter  table  表名   drop   字段名;    

alter  table  my_student  drop  age;                                       

删除数据表: drop  table  表名1,表名2,……;         一次性删除多个表

数据操作

---新增数据(插入全表字段数据) insert into my_student values('Jim','female',1106101);

---新增数据(指定字段列表)   insert into  my_student(number,sex)  values(1106,'male');

---查看所有的数据  select  * 

                  from  表名

                  [where 条件];

---更新数据    alter是操作数据库,表,字段。 update更新数据

--更新名字叫Jim的性别。      update  表名  set  字段 = 值[where 条件];

update my_student set sex = 'female' where name = 'Jim';

---删除数据 

--删除表中性别男的      delete  from  表名  [where  条件];

delete  from my_student  where  sex = 'male';

中文数据问题本质是字符集问题,set names  gbk;   一定要设置字符集。

外键:如果一张表中有一个字键段(非主键)指向另外一张表的主键,那么将该字段称之为外键。

主键问题

主键直接在字段之后,可以有多个字段作为主键,这样的主键称为复合主键。

没有主键,追加主键    alter  table  my_database  modify  course  char(10)  primary key;

没有主键,追加复合主键  alter table  my_student  add  primary key (sno,cno);

更新主键 & 删除主键  alter  table  表名 drop primary  key;

范式:终极目标为了减少数据的冗余,凡是通过关系寻找出来的数据,坚决不再重复存储。

第一范式:在设计表存储数据时,数据具有原子性。

如表(姓名,性别,教课时间(开始,结束))  此表的教课时间仍可拆分,不具备原子性。

解决办法(姓名,性别,开始,结束)

第二范式:解决表设计出现的部分依赖,部分依赖就是存在字段依赖主键中某个字段(主键的部分)。只要不存在复合主键,表的设计就一定满足2NF

如一张表中有(讲师,性别,班级,教室,带课时间,开始时间,结束时间)   因为讲师没办法作为主键,需要结合讲师班级才能作为主键(一个老师在一个班只带一个阶段的课,性别并不依赖班级,只依赖讲师;教室不依赖讲师,只依赖班级,因此出现了性别和教室依赖主键中的一部分)

解决方案: 可以将性别与讲师单独成表,班级与教室也单独成表,以此取消复合主键。

有人也认为可以使用逻辑主键,例如增加IDP。这样真的可以吗?  不可以,如下,会出现传递依赖。

第三范式:理论上讲,应该一张表中的所有字段都直接依赖主键,如果表设计中存在一个字段,并不直接依赖主键,而是通过某个非主键字段依赖,最终实现依赖主键,如一张表中有(主键IDP,讲师,性别,班级,教室,带课时间,开始时间,结束时间)  性别依赖于讲师,讲师依赖于主键IDP;教室依赖班级,班级依赖主键IDP。性别和教师都存在传递依赖。

解决方案:将存在传递依赖的字段,以及依赖的字段本身单独取出,形成一个单独的表,然后在需要对应的信息的时候,使用对应的实体表的主键加进来。一句话就是实体单独建表。

查询数据完整语法

select 字段名/*

from  数据源

[where 条件子句]

[group by 子句]

[having 子句]

[order by 子句]

[limit 子句];

select *  from my_student; 

---去重

select distinct *  from  my_student;

--插入数据

insert into my_student values(null,'itcast01','张三','男'),(null,'itcast02','李四','男'),(null,'itcast03','王五','女'),(null,'itcast03','男');

--字段别名

select id,number as 学号,name as 姓名, sex 性别 

from my_student;

where子句

原理:where是唯一一个直接从磁盘获取数据的时候就开始判断的条件:从磁盘取出一条记录,开始进行where判断,判断的结果如果成立保存到内存,反之放弃。

---找学生id为1,3,5的学生

select  *  from  my_student  where id =1 || id =3 || id =5;

或者select * from my_student where id in(1,3,5);

group by  字段 [asc/desc];   分组  根据某个字段进行分组,相同的放一组,不同的分到不同的组。统计的是数据,不是记录

--按性别分组

select * from my_student group by sex; 这是绝对错误的,分组是为了统计数据,按分组字段进行数据统计

SQL提供了一系列统计函数

Count();  统计分组后的记录数,每一相同的组有多少行记录

Max();   统计每组最大的值

Min();   统计每组最小的值

Avg();   统计每组的平均值

Sum();   统计每组的和

---身高高矮,平均年龄,和总年龄

select sex,count(*),max(height),min(height),avg(age),sun(age)   from my_student  group by sex;

注意使用group by却不使用统计函数,没意义!

多字段分组:先根据一个字段进行分组,然后对分组后的结果再次按照其他字段分组。

having子句

与where子句一样进行条件判断,思考:为什么是group by……having…… 而不是group by……where???

进行数据统计时,是数据进入内存之后,会进行分组-》统计-》having条件判断。而where是针对从磁盘读取数据时进行判断,此刻还没分组,进行统计就判断了。所以错误!!!

---求出所有班级人数大于等于2的学生人数

order by 子句

order by根据某个字段进行升序或降序排序,依赖校对集

基本语法: order by 字段名 [asc/desc];  asc升序 可不写      desc降序

 

limit子句是一种限制结果的语句

1)用来限制数量

--查询学生前两个   select * from my_student limit 2;

2)限制起始位置  limit 起始位置,长度

--查从编号4开始,询找两个学生

select * from my_student limit 4,2;

内连接,外连接,自然连接,交叉连接

内连接,从左表中取出每一条记录,和右表中所有的记录进行匹配,匹配必须是左表中与右表中某个条件相同,最终会保留结果,否则不保留。

基本语法:  左表 [inner] join 右表  on 左表.字段 = 右表.字段;

select * from my_student inner join my_class on my_student.C_id = mu_class.id;

左外连接:左表为主,然后每条记录与右表进行连接,不管能不能匹配的上,左表都会保留。能匹配,右表某条记录保留,不能匹配,某条记录置为NULL,最终记录数至少不少于左表已有的记录。

基本语法:  左表  left join  右表  on  左表.字段 = 右表.字段;

a表     id   name      b表     id   job   parent_id

1   张3                   1     23     1

2   李四                 2     34     2

3   王武                 3     34     4

a.id同parent_id   存在关系

--------------------------------------------------

 1) 内连接 

select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id

结果是

1   张3                   1     23     1

2   李四                  2     34     2

 2)左连接  

select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id

结果是

1   张3                   1     23     1

2   李四                  2     34     2

3   王武                  null


3) 右连接   

select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id

结果是

1   张3                   1     23     1

2   李四                  2     34     2

null                        3     34     4

4) 完全连接 

select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id

结果是

1   张3                  1     23     1

2   李四                 2     34     2

null                   3     34     4

3   王武                 null

需要手动增加可以远程访问数据库的用户。

方法一、本地登入mysql,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,将"localhost"改为"%"

#mysql -u root -proot

mysql>use mysql;

mysql>update user set host = '%' where user = 'root';

mysql>select host, user from user;

方法二、直接授权(推荐)

  从任何主机上使用root用户,密码:youpassword(你的root密码)连接到mysql服务器:

# mysql -u root -proot

mysql>GRANT ALL PRIVILEGES ON *.* TO'root'@'%'IDENTIFIED BY 'youpassword' WITH GRANT OPTION;

操作完后切记执行以下命令刷新权限 

FLUSH PRIVILEGES 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335

推荐阅读更多精彩内容