MySQL: UPDATE, DELETE और ALTER
शुरुआती data
हम पिछले lesson में डाली गई 7 rows (RollNo 101–107) वाली वही STUDENT table use करते हैं। इस page की queries एक के बाद एक चलती हैं, इसलिए हर query पिछली queries के बदलाव देखती है।
UPDATE – data बदलना
UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
XI-B को 2 grace marks:
UPDATE STUDENT SET Marks = Marks + 2 WHERE Class = 'XI-B'; SELECT Name, Class, Marks FROM STUDENT WHERE Class = 'XI-B';
+-------+-------+-------+ | Name | Class | Marks | +-------+-------+-------+ | Kabir | XI-B | 69.5 | | Diya | XI-B | 77.0 | +-------+-------+-------+
एक student के कई columns update:
UPDATE STUDENT SET City = 'Agra', DOB = '2009-01-20' WHERE RollNo = 107; SELECT * FROM STUDENT WHERE RollNo = 107;
+--------+-------+--------+------------+-------+-------+------+ | RollNo | Name | Gender | DOB | Class | Marks | City | +--------+-------+--------+------------+-------+-------+------+ | 107 | Rohan | M | 2009-01-20 | XI-A | 39.5 | Agra | +--------+-------+--------+------------+-------+-------+------+
Missing cities भरना:
UPDATE STUDENT SET City = 'Not given' WHERE City IS NULL; SELECT Name, City FROM STUDENT;
+--------+-----------+ | Name | City | +--------+-----------+ | Aarav | Jaipur | | Sana | Lucknow | | Kabir | Jaipur | | Diya | Pune | | Ishaan | Delhi | | Meher | Not given | | Rohan | Agra | +--------+-----------+
DELETE – rows हटाना
DELETE FROM table_name WHERE condition;
DELETE FROM STUDENT WHERE Marks < 40; SELECT RollNo, Name, Marks FROM STUDENT;
+--------+--------+-------+ | RollNo | Name | Marks | +--------+--------+-------+ | 101 | Aarav | 88.5 | | 102 | Sana | 92.0 | | 103 | Kabir | 69.5 | | 104 | Diya | 77.0 | | 105 | Ishaan | 54.0 | | 106 | Meher | 81.0 | +--------+--------+-------+
Rohan (39.5) हट गया। WHERE के बिना सारी rows delete होतीं, पर ख़ाली table बनी रहती।
ALTER TABLE – ढाँचा बदलना
ALTER TABLE STUDENT ADD Email VARCHAR(40); DESCRIBE STUDENT;
+--------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+--------------+------+-----+---------+-------+ | RollNo | int | NO | PRI | NULL | | | Name | varchar(30) | NO | | NULL | | | Gender | char(1) | YES | | NULL | | | DOB | date | YES | | NULL | | | Class | varchar(5) | YES | | XI-A | | | Marks | decimal(5,1) | YES | | NULL | | | City | varchar(20) | YES | | NULL | | | Email | varchar(40) | YES | | NULL | | +--------+--------------+------+-----+---------+-------+
ALTER TABLE STUDENT MODIFY Name VARCHAR(40) NOT NULL; ALTER TABLE STUDENT CHANGE City HomeCity VARCHAR(25); ALTER TABLE STUDENT DROP Email; DESCRIBE STUDENT;
+----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | RollNo | int | NO | PRI | NULL | | | Name | varchar(40) | NO | | NULL | | | Gender | char(1) | YES | | NULL | | | DOB | date | YES | | NULL | | | Class | varchar(5) | YES | | XI-A | | | Marks | decimal(5,1) | YES | | NULL | | | HomeCity | varchar(25) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+
Default value बदलना:
ALTER TABLE STUDENT ALTER Class SET DEFAULT 'XI-B'; INSERT INTO STUDENT (RollNo, Name) VALUES (108, 'Tara'); SELECT RollNo, Name, Class FROM STUDENT WHERE RollNo = 108;
+--------+------+-------+ | RollNo | Name | Class | +--------+------+-------+ | 108 | Tara | XI-B | +--------+------+-------+
ALTER से keys जोड़ना
MARKS table को composite primary key (एक student, एक subject) और STUDENT की foreign key चाहिए:
CREATE TABLE MARKS (RollNo INT, Subject VARCHAR(20), Score INT); ALTER TABLE MARKS ADD PRIMARY KEY (RollNo, Subject); ALTER TABLE MARKS ADD FOREIGN KEY (RollNo) REFERENCES STUDENT(RollNo); DESCRIBE MARKS;
+---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | RollNo | int | NO | PRI | NULL | | | Subject | varchar(20) | NO | PRI | NULL | | | Score | int | YES | | NULL | | +---------+-------------+------+-----+---------+-------+
Primary key हटाने के लिए: ALTER TABLE MARKS DROP PRIMARY KEY;
DELETE vs DROP
DELETE FROM MARKS; -- removes all rows, table stays DROP TABLE MARKS; -- removes the table itself
SHOW TABLES;
+------------------+ | Tables_in_school | +------------------+ | STUDENT | +------------------+
DELETE (DML)
- Rows हटाता है (सब या WHERE से कुछ)
- Table का ढाँचा बना रहता है
- DELETE FROM MARKS;
DROP (DDL)
- पूरी table हटाता है: ढाँचा + data
- Table रहती ही नहीं
- DROP TABLE MARKS;
Safety tips
- 1पहले उसी WHERE के साथ SELECT चलाकर देखें कौन सी rows बदलेंगी।
- 2हमेशा check करें कि UPDATE और DELETE में WHERE है।
- 3ठीक एक row बदलने के लिए WHERE में primary key use करें।
- 4ज़रूरी tables पर ALTER या DROP से पहले backup लें।
सारांश और practice
- UPDATE … SET … WHERE मौजूदा rows बदलता है।
- DELETE FROM … WHERE rows हटाता है; DROP TABLE table हटाता है।
- ALTER TABLE: ADD, MODIFY, CHANGE, DROP columns; ADD/DROP PRIMARY KEY; ALTER … SET DEFAULT।
SQL लिखें: (1) सभी लड़कियों के marks 5% बढ़ाएँ, (2) RollNo 105 की class XI-C करें, (3) Pune के students delete करें, (4) column Phone CHAR(10) जोड़ें, (5) column Marks का नाम Percentage करें।
Answers: (1) UPDATE STUDENT SET Marks = Marks * 1.05 WHERE Gender = 'F'; (5) ALTER TABLE STUDENT CHANGE Marks Percentage DECIMAL(5,1);
