Ravindra BagaleCourses & study guides English

SQL ALTER TABLE Command, examples सकट

Table कधीच "पूर्ण" होत नाहीत. Launch नंतर महिन्याभरात कोणीतरी phone number मागतो, city column ला चांगलं नाव हवं असतं, आणि एकाच नावाचे दोन users वेगळे ओळखताच येत नाहीत हे लक्षात येतं. या chapter मध्ये आपण data असलेला table ALTER TABLE ने बदलू, NOT NULL, DEFAULT आणि UNIQUE सारखे नियम लावू, primary key आणि AUTO_INCREMENT ने प्रत्येक row ला सुरक्षित ओळख देऊ, आणि data काढायचे तीन मार्ग शिकू: DELETE, TRUNCATE आणि DROP.

या class मध्ये काय शिकणार

  • UPDATE (data बदलतो) विरुद्ध ALTER TABLE (structure बदलतो)
  • Safe update mode: SELECT @@SQL_SAFE_UPDATES, SET SQL_SAFE_UPDATES = 1 / 0, आणि ERROR 1175
  • ALTER TABLE ... ADD COLUMN, MODIFY COLUMN, DROP COLUMN, RENAME COLUMN आणि RENAME TO
  • Phone number VARCHAR का, काही type बदल fail का होतात, आणि INT ची खरी मर्यादा
  • NOT NULL (ERROR 1364), DEFAULT, आणि column परत लिहून नियम काढणं
  • Primary key विरुद्ध unique key: duplicates, NULL, आणि एका table मध्ये किती
  • AUTO_INCREMENT: स्वतः id देणं, ERROR 1062, आणि ids मध्ये gaps का येतात
  • आधीपासून असलेल्या column ला UNIQUE लावणं
  • DELETE विरुद्ध TRUNCATE विरुद्ध DROP, table साठी आणि database साठी

1. Practice data

का: खालच्या प्रत्येक command चा result दिलेला आहे. तुम्ही याच पाच rows टाकल्या, तर तुम्हाला तीच उत्तरं मिळतील आणि स्वतः तपासता येईल.

कसं:

  1. mysql -u root -p ने login करा.
  2. नवीन instagram database ने सुरुवात करा. पहिल्या SQL chapter मधला असेल, तर हे तो काढून टाकतं:

    DROP DATABASE IF EXISTS instagram;
    CREATE DATABASE instagram;
    USE instagram;
    
  3. अजून कोणताही नियम नसलेला users table बनवा:

    CREATE TABLE users (id INT, name VARCHAR(50), city VARCHAR(50), age INT);
    
  4. पाच rows टाका. Row 3 मुद्दाम दोनदा टाकली आहे:

    INSERT INTO users VALUES
    (1, 'amit', 'pune', 25), (2, 'neha', 'mumbai', 30), (3, 'rahul', 'nashik', 28),
    (3, 'rahul', 'nashik', 28), (4, 'sneha', NULL, NULL);
    
  5. SELECT * FROM users; पाच rows दाखवतो.

पुढे लागणाऱ्या दोन गोष्टी लक्षात ठेवा: दोन rows अगदी सारख्या आहेत (3, rahul, nashik, 28), आणि sneha ची city आणि age दोन्ही नाहीत.

या chapter मधले screenshots जास्त rows असलेल्या table वर घेतले आहेत, म्हणून त्यांचे row counts तुमच्यापेक्षा वेगळे दिसतील. Commands आणि messages तेच आहेत.

2. UPDATE विरुद्ध ALTER TABLE

का: दोन्ही शब्दांचा अर्थ "बदल" असाच वाटतो, आणि interviewers ना हा फरक विचारायला आवडतो.

काय:

  1. UPDATE data बदलतो: rows मधल्या values. Columns तसेच राहतात.
  2. ALTER TABLE structure बदलतो: कोणते columns आहेत, त्यांचे types, नावं आणि नियम. Rows तशाच राहतात.

Classroom line

To change the table itself, the query is ALTER TABLE.

कसं: ही दोन उदाहरणं फक्त वाचा; खऱ्या commands section 3 पासून चालवू.

  1. UPDATE users SET age = 26 WHERE id = 1; एका row मधली एक value बदलेल.
  2. ALTER TABLE users ADD COLUMN phone VARCHAR(15); एकदम प्रत्येक row ला column जोडेल.
  3. सोपी कसोटी: प्रश्न values बद्दल असेल तर UPDATE; columns बद्दल असेल तर ALTER TABLE.

3. Safe update mode

का: WHERE शिवाय UPDATE किंवा DELETE प्रत्येक row बदलतो किंवा delete करतो. एक विसरलेली line पूर्ण column पुसू शकते. Safe update mode त्या चुकीविरुद्ध seat belt आहे.

काय: Safe update mode on असताना MariaDB UPDATE किंवा DELETE नाकारतो, जोपर्यंत त्याचा WHERE key column (उदा. primary key) वापरत नाही, किंवा statement मध्ये LIMIT नाही. या setting चं नाव SQL_SAFE_UPDATES आहे आणि ती तुमच्या session पुरती असते: नवीन login परत server च्या default ने सुरू होतो.

Classroom line

Even if we forget the WHERE condition by mistake, that query won't run.

कसं:

  1. सध्याची value बघा: SELECT @@SQL_SAFE_UPDATES; नवीन login वर ती 0 दाखवते, म्हणजे off.
  2. या session साठी on करा: SET SQL_SAFE_UPDATES = 1;
  3. WHERE नसलेला update करून बघा:

    UPDATE users SET city = 'pune';
    
  4. MariaDB नाकारतो: ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

  5. साध्या column वरचा WHERE पण नाकारला जातो, कारण city key column नाही. DELETE FROM users WHERE city = 'nashik'; सुद्धा तोच ERROR 1175 देतो.
  6. LIMIT चालतो, कारण तो नुकसान मर्यादित ठेवतो: UPDATE users SET city = 'delhi' WHERE name = 'sneha' LIMIT 1; Query OK, 1 row affected असं उत्तर देतो.
  7. id primary key झाल्यावर (section 12), WHERE id = 2 पण चालतो.
  8. परत off करा: SET SQL_SAFE_UPDATES = 0; हा पूर्ण chapter तो off ठेवूनच चालतो.
  9. SELECT, INSERT आणि ALTER TABLE या setting ने कधीच अडत नाहीत.

Classroom line

Remember this; it is asked in interviews.

MariaDB terminal: update users set phone='0000000000' where phone is null; fails with ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. Then ALTER TABLE users MODIFY COLUMN name varchar(20) not null; Query OK. desc users; shows id int(11), name varchar(20) Null NO, city varchar(50), age int(11), phone varchar(20).

Whiteboard: Safe update mode key column न वापरणाऱ्या WHERE चा UPDATE नाकारतो (ERROR 1175). पुढची command name NOT NULL करते, आणि DESC name साठी Null = NO दाखवतो.

Safe update mode: UPDATE आणि DELETEला WHERE मध्ये key, किंवा LIMITलागतो SELECT @@SQL_SAFE_UPDATES; -- 0 = off, 1 =on SET SQL_SAFE_UPDATES = 1; -- on, for thissession only SET SQL_SAFE_UPDATES = 0; -- off again Safe updates on असताना: UPDATE users SET city='pune';ERROR 1175: no WHERE at all DELETE FROM users WHERE city='nashik';ERROR 1175: city key column नाही ... WHERE name='sneha' LIMIT 1;चालतो: LIMIT नुकसान मर्यादित ठेवतो UPDATE users SET age=31 WHERE id=2;id PRIMARY KEY झाल्यावर चालतो तुमच्या session साठी seat belt: नवीन login परत serverच्या default ने सुरू होतो. SELECT, INSERT आणि ALTER TABLE वर परिणाम होत नाही.

Figure 1. Safe update mode: WHERE नसेल, किंवा non-key column वर WHERE असेल, तर ERROR 1175; LIMIT किंवा primary key वरचा WHERE चालतो. ही setting फक्त तुमच्या session पुरती.

4. ADD COLUMN: प्रत्येक row साठी नवीन column

का: App ला आता प्रत्येक user चा phone number हवा आहे. तुम्ही नवीन table बनवत नाही; असलेल्या table ला column जोडता.

काय: ALTER TABLE ... ADD COLUMN शेवटी column जोडतो. असलेल्या प्रत्येक row मध्ये त्यात NULL येतो, कारण अजून कोणीच value दिलेली नाही. COLUMN हा शब्द optional आहे: ADD phone INT पण चालतं.

कसं:

  1. Column जोडा:

    ALTER TABLE users ADD COLUMN phone INT;
    
  2. MariaDB Query OK, 0 rows affected असं उत्तर देतो. एकही row वाढली किंवा कमी झाली नाही.

  3. DESC users; आता int(11) type सह phone दाखवतो.
  4. SELECT * FROM users; पाचही rows मध्ये phone मध्ये NULL दाखवतो.
  5. Value नेहमीसारखी UPDATE ने भरा: UPDATE users SET phone = ... WHERE id = 1;
MariaDB terminal: ALTER TABLE users add column phone int; Query OK, 0 rows affected. desc users; lists id int(11), name varchar(50), city varchar(50), age int(11), phone int(11), all Null YES with Default NULL.

Whiteboard: ALTER TABLE users ADD COLUMN phone INT, आणि DESC शेवटी नवीन phone column दाखवतो.

5. MODIFY COLUMN: type किंवा size बदला

का: INT phone column ही चूक आहे, हे खरा number टाकताक्षणी कळतं.

काय: MODIFY COLUMN column ला नवा type, size किंवा नियम देतो. तुम्ही पूर्ण column definition परत लिहिता. MariaDB प्रत्येक असलेली value convert करतो; प्रत्येक value नव्या type मध्ये बसली तरच बदल होतो.

कसं:

  1. INT column मध्ये खरा mobile number टाकून बघा:

    UPDATE users SET phone = 9876543210 WHERE id = 1;
    
  2. Fail होतो: ERROR 1264 (22003): Out of range value for column 'phone' at row 1. सगळ्यात मोठा INT 2,147,483,647 आहे, आणि 9876543210 सारखा 10 अंकी mobile number त्यापेक्षा मोठा आहे.

  3. int(11) मधलं 11 फक्त display width आहे. त्याचा अर्थ "11 digits" नाही, आणि त्याने मर्यादा बदलत नाही.
  4. Number column ची दुसरी अडचण: तो फक्त value ठेवतो. पुढचा + आणि सुरुवातीचा 0 (020... सारख्या landline numbers मधला) जातो.
  5. म्हणजे phone number हा text आहे. Type बदला:

    ALTER TABLE users MODIFY COLUMN phone VARCHAR(15);
    
  6. DESC users; आता phone varchar(15) दाखवतो.

  7. आता plus चिन्हासह पूर्ण number बसतो:

    UPDATE users SET phone = '+919876543210' WHERE id = 1;
    UPDATE users SET phone = '02025501234' WHERE id = 2;
    
  8. Column मोठा करणं नेहमी सुरक्षित: ALTER TABLE users MODIFY COLUMN phone VARCHAR(20); चालतो.

  9. लहान करताना value बसली नाही तर fail: MODIFY COLUMN phone VARCHAR(10) ERROR 1265 (01000): Data truncated for column 'phone' at row 1 देतो, कारण +919876543210 मध्ये 13 characters आहेत.
  10. VARCHAR वरून परत INT करणं पण fail होतं: MODIFY COLUMN phone INT ERROR 1264 ... Out of range value for column 'phone' देतो, कारण 919876543210 हा INT च्या मर्यादेपेक्षा मोठा आहे.
  11. लक्षात ठेवायचा नियम: लहानाकडून मोठ्याकडे सुरक्षित; मोठ्याकडून लहानाकडे, किंवा कडक type कडे, तेव्हाच चालतं जेव्हा प्रत्येक असलेली value बसते.
MariaDB terminal: ALTER TABLE users modify column phone varchar(15); Query OK, 14 rows affected; Records: 14 Duplicates: 0 Warnings: 0. desc users; lists id int(11), name varchar(50), city varchar(50), age int(11), phone varchar(15).

Whiteboard: ALTER TABLE users MODIFY COLUMN phone VARCHAR(15) असलेल्या rows convert करतो, आणि DESC phone varchar(15) दाखवतो.

MODIFY COLUMN तेव्हाच चालतो जेव्हाप्रत्येक असलेली value नव्या type मध्ये बसते मोठा किंवा सैल: नेहमी बसतो INT -> VARCHAR(15) प्रत्येक number text म्हणून लिहिता येतो VARCHAR(15) -> VARCHAR(20) जास्त जागा, काहीच कापलं जात नाही Query OK, सगळ्या rows convert. लहान किंवा कडक: एक value बसली नाही तर fail VARCHAR(20) -> VARCHAR(10) '+919876543210' has 13 characters ERROR 1265: Data truncated VARCHAR(20) -> INT 919876543210 > 2147483647 ERROR 1264: Out of range Phone number VARCHAR का, INT का नाही INT max = 2,147,483,647 9876543210 सारखा 10 अंकी mobile number यापेक्षा मोठा. '+91...' '020...' Number column फक्त value ठेवतो: + आणि सुरुवातीचा 0 जातो. int(11) 11 फक्त display width आहे, value वरची मर्यादा नाही.

Figure 2. प्रत्येक असलेली value बसली तरच MODIFY COLUMN चालतो: INT ते VARCHAR आणि VARCHAR(15) ते VARCHAR(20) सुरक्षित; value बसली नाही तर VARCHAR(20) ते VARCHAR(10) किंवा INT fail. Phone number VARCHAR का.

6. NOT NULL: value compulsory करा

का: नाव नसलेला user आपल्या app मध्ये काहीच अर्थाचा नाही. App काहीही पाठवो, database नेच अशी row नाकारावी असं तुम्हाला हवं.

काय: NOT NULL म्हणजे column मध्ये नेहमी value पाहिजे. तो column सोडणारा, किंवा NULL पाठवणारा INSERT नाकारला जातो.

कसं:

  1. name compulsory करा:

    ALTER TABLE users MODIFY COLUMN name VARCHAR(20) NOT NULL;
    
  2. DESC users; name साठी Null column मध्ये NO दाखवतो.

  3. नाव नसलेला user टाका:

    INSERT INTO users (id, city) VALUES (5, 'goa');
    
  4. Fail होतो: ERROR 1364 (HY000): Field 'name' doesn't have a default value.

  5. मुद्दाम NULL पाठवलं तरी fail: INSERT INTO users (id, name, city) VALUES (5, NULL, 'goa'); ERROR 1048 (23000): Column 'name' cannot be null देतो.
  6. ज्या column मध्ये आधीच NULL values आहेत तो NOT NULL होऊ शकत नाही. MODIFY COLUMN phone VARCHAR(20) NOT NULL ERROR 1265 (01000): Data truncated for column 'phone' at row 3 देतो, कारण तीन rows ना phone नाही. MariaDB चा default strict mode गुपचूप काहीतरी भरण्याऐवजी नाकारतो.
  7. आधी त्या rows UPDATE ने ठीक करा, मग NOT NULL लावा.

Classroom line

Remember one thing: if the column already holds NULLs and you try to make it NOT NULL, it won't work.

7. DEFAULT: value दिली नाही तर

का: कधी कधी नसलेल्या value ला योग्य उत्तर असतं. नाव न देता sign up करणारा user "unknown" म्हणून दाखवता येतो, anonymous account सारखा.

काय: INSERT ने column सोडला तर MariaDB जी value साठवतो ती DEFAULT. ती NOT NULL सह किंवा शिवाय चालते.

कसं:

  1. NOT NULL ठेवून default जोडा:

    ALTER TABLE users MODIFY COLUMN name VARCHAR(20) NOT NULL DEFAULT 'unknown';
    
  2. आधी fail झालेला insert चालवा:

    INSERT INTO users (id, city) VALUES (5, 'goa');
    
  3. आता चालतो, आणि row 5 चं नाव unknown आहे.

  4. age ला NOT NULL शिवाय 18 चा default द्या:
    ALTER TABLE users MODIFY COLUMN age INT DEFAULT 18;
    

Classroom line

If someone doesn't insert an age, 18 should go there.

  1. Age नसलेला user टाका:

    INSERT INTO users (id, name, city) VALUES (6, 'kiran', 'solapur');
    
  2. SELECT * FROM users; 6 | kiran | solapur | 18 दाखवतो.

  3. Default फक्त column सोडणाऱ्या नवीन rows भरतो. जुन्या rows चा NULL तसाच राहतो: sneha ची age अजून NULL च आहे.
  4. DESC users; Default column मध्ये unknown आणि 18 दाखवतो.
MariaDB terminal: ALTER TABLE users MODIFY COLUMN age int DEFAULT 18; Query OK, 0 rows affected. desc users; lists id int(11), name varchar(20) Null NO Default unknown, city varchar(50), age int(11) Default 18, phone varchar(20).

Whiteboard: ALTER TABLE users MODIFY COLUMN age INT DEFAULT 18; DESC age साठी Default 18 आणि name साठी unknown दाखवतो.

NOT NULL value compulsory करतो; तुम्ही सोडलीतर DEFAULT ती भरतो ALTER TABLE users MODIFY COLUMN name VARCHAR(20) NOTNULL; INSERT INTO users (id, city) VALUES (5, 'goa'); ERROR 1364 (HY000): Field 'name' doesn't have a defaultvalue Name दिलं नाही, आणि name NULL चालत नाही: row नाकारली जाते. ALTER TABLE users MODIFY COLUMN name VARCHAR(20) NOTNULL DEFAULT 'unknown'; INSERT INTO users (id, city) VALUES (5, 'goa'); id=5 name=unknown city=goa age=NULL तोच INSERT: default येऊन बसतो. Anonymous account सारखं. ALTER TABLE users MODIFY COLUMN age INT DEFAULT 18; INSERT INTO users (id, name, city) VALUES (6, 'kiran','solapur'); id=6 name=kiran city=solapur age=18 DEFAULT NOT NULL शिवाय पण चालतो: age सोडली तर 18. आधीच NULL असलेला column NOT NULL होत नाही (ERROR1265). आधी त्या rows UPDATE करून खरी value द्या, मग NOT NULL लावा.

Figure 3. Animation: name NOT NULL असताना नाव नसलेला insert ERROR 1364 ने fail; NOT NULL DEFAULT 'unknown' सह तोच insert चालतो; age INT DEFAULT 18 age सोडल्यावर 18 भरतो.

8. नियम काढा: column तो नियम सोडून परत लिहा

का: नियम बदलतात. कदाचित name परत optional करायचं असेल.

काय: "NOT NULL काढा" अशी वेगळी command नाही. MODIFY COLUMN पूर्ण column definition बदलतो, म्हणून जे सोडाल ते काढलं जातं.

Classroom line

To add something, write it in the query; to remove it, write the query without it.

कसं:

  1. Default ठेवून NOT NULL काढा:

    ALTER TABLE users MODIFY COLUMN name VARCHAR(20) DEFAULT 'unknown';
    
  2. DESC users; Null = YES आणि Default = unknown दाखवतो.

Classroom line

Write DEFAULT directly, without NOT NULL.

  1. Default पण काढा:

    ALTER TABLE users MODIFY COLUMN name VARCHAR(20);
    
  2. DESC users; Null = YES आणि Default = NULL दाखवतो.

  3. याच नियमाची दुसरी बाजू: फक्त size बदलताना सुद्धा नियम परत लिहा, नाहीतर ते चुकून जातात. NOT NULL DEFAULT 'unknown' असलेल्या column वर MODIFY COLUMN name VARCHAR(30) दोन्ही नियम काढतो.
नियम काढायचा असेल, तर column तो नियम सोडून परतलिहा ALTER TABLE users ... MODIFY COLUMN name VARCHAR(20) NOT NULL DEFAULT'unknown'; Null NO Default unknown Result दोन्ही नियम MODIFY COLUMN name VARCHAR(20) DEFAULT 'unknown'; Null YES Default unknown Result NOT NULL सोडलं: गेलं MODIFY COLUMN name VARCHAR(20); Null YES Default NULL Result DEFAULT सोडलं: गेलं MODIFY पूर्ण column definition बदलतो. जे सोडाल ते काढलं जातं,म्हणून नेहमी type परत लिहा, आणि ठेवायचे ते सगळे नियम पण.

Figure 4. MODIFY पूर्ण column definition बदलतो: NOT NULL सोडलं तर ते जातं; DEFAULT सोडलं तर ते जातं.

9. DROP COLUMN, RENAME COLUMN आणि RENAME TO

का: कोणी न वापरणारे columns काढायला हवेत, आणि column मध्ये काय आहे ते त्याच्या नावावरून कळायला हवं.

काय:

  1. DROP COLUMN column आणि त्यातला सगळा data काढतो.
  2. RENAME COLUMN old TO new data ठेवतो आणि फक्त नाव बदलतो.
  3. RENAME TO पूर्ण table चं नाव बदलतो.

कसं:

  1. Phone column काढा:

    ALTER TABLE users DROP COLUMN phone;
    
  2. city चं नाव बदला, कारण त्यात पूर्ण पत्ते येणार आहेत:

    ALTER TABLE users RENAME COLUMN city TO address;
    
  3. DESC users; आता id, name, address, age दाखवतो.

  4. Table चं नाव बदला:

    ALTER TABLE users RENAME TO people;
    
  5. SHOW TABLES; people दाखवतो. ALTER TABLE people RENAME TO users; ने परत नाव बदला (RENAME TABLE people TO users; पण तेच करतं).

  6. RENAME COLUMN ला MariaDB 10.5 किंवा नवीन लागतो. जुन्या server वर CHANGE वापरा, त्याला जुनं नाव, नवं नाव आणि पूर्ण type लागतो: ALTER TABLE users CHANGE city address VARCHAR(50);
MariaDB terminal: ALTER TABLE users DROP COLUMN phone; Query OK. desc users; lists id int(11), name varchar(20), city varchar(50), age int(11) Default 18. ALTER TABLE users RENAME COLUMN city to address; Query OK, 0 rows affected.

Whiteboard: ALTER TABLE users DROP COLUMN phone, phone शिवाय DESC, मग ALTER TABLE users RENAME COLUMN city TO address.

ALTER TABLE structure बदलतो; rows तशाचराहतात Field Type id int name varchar(50) city varchar(50) age int ALTER TABLE users ADD COLUMN phone INT; phone int ADD: शेवटी नवीन column. असलेल्या rows मध्ये त्यात NULL. एकही row वाढत किंवा कमी होतनाही. ALTER TABLE users MODIFY COLUMN phone VARCHAR(15); phone varchar(15) MODIFY: नवा type किंवा size. Values convert होऊन टिकतात. पूर्ण column definition परत लिहायची. ALTER TABLE users DROP COLUMN phone; ALTER TABLE users RENAME COLUMN city TO address; address varchar(50) DROP: column आणि त्यातला data गेला. RENAME COLUMN: तोच data, नवं नाव. RENAME TO पूर्ण table चं नाव बदलतो. ALTER TABLE users RENAME TO people; प्रत्येक बदल DESC users; ने तपासा

Figure 5. Animation: ADD COLUMN phone INT, MODIFY COLUMN phone VARCHAR(15), मग DROP COLUMN phone आणि RENAME COLUMN city TO address, प्रत्येक step नंतर DESC सह.

10. Tables ना keys का लागतात

का: त्या दोन सारख्या rahul rows बघा. त्यातल्या एकाचं नाव बदलायचं आहे असं समजा.

कसं:

  1. नावाने करून बघा:

    UPDATE users SET name = 'rahul k' WHERE name = 'rahul';
    
  2. MariaDB Rows matched: 2 Changed: 2 असं उत्तर देतो. दोन्ही rows बदलल्या.

  3. WHERE id = 3 पण दोन्हीला जुळेल, कारण दोघांचा id 3 आहे.
  4. दोन सारख्या rows पैकी नेमकी एक कोणतीच query निवडू शकत नाही. Table ला असा column हवा ज्याची value प्रत्येक row मध्ये वेगळी असेल, आणि कधीच रिकामी नसेल.

Classroom line

A column whose values are all unique, and never empty, is what we call the primary key.

काय: Key म्हणजे database एका column वर लावतो तो नियम. हा chapter दोन keys बघतो: primary key आणि unique key. तिसरी, foreign key, दोन tables जोडते; ती पुढच्या SQL chapter मध्ये.

11. Primary key विरुद्ध unique key

का: हा interviewer चा आवडता SQL प्रश्न आहे, आणि याच्या उत्तरावरून तुम्ही प्रत्येक table कसा design करता ते ठरतं.

Classroom line

The favourite interview question: the difference between a primary key and a unique key.

काय:

  1. दोन्ही duplicates नाकारतात.
  2. Primary key मध्ये NULL कधीच चालत नाही. Column primary key केला की तो NOT NULL होतो.
  3. Unique key मध्ये NULL चालतो, अनेक rows मध्ये सुद्धा, कारण NULL म्हणजे "माहीत नाही" आणि तो कशाच्याच बरोबर नसतो.
  4. एका table ला फक्त एकच primary key असतो. दोन लिहिले तर ERROR 1068 (42000): Multiple primary key defined. तो एक primary key अनेक columns मिळून पण असू शकतो, उदा. PRIMARY KEY (a, b).
  5. एका table ला अनेक unique keys असू शकतात: email, phone, username, प्रत्येक unique.
  6. DESC primary key साठी PRI आणि unique key साठी UNI दाखवतो.
  7. जवळपास कोणताही column type primary key होऊ शकतो: INT, VARCHAR(10), अगदी DATE सुद्धा. सहसा छोटा number निवडतात, कारण तो लहान, fast असतो आणि कधी बदलावा लागत नाही.

Classroom line

A table has only one primary key, but it can have many unique key columns.

Classroom line

With a primary key, duplicates cannot be added.

कसं: users चा id primary key करा.

  1. लगेच करून बघा:

    ALTER TABLE users MODIFY COLUMN id INT PRIMARY KEY;
    
  2. Fail होतो: ERROR 1062 (23000): Duplicate entry '3' for key 'PRIMARY'. दोन rahul k rows चा id अजून 3 च आहे. (NULL id असता तरी असंच अडलं असतं.)

  3. आधी data साफ करा. दोन सारख्या rows पैकी एक काढा:

    DELETE FROM users WHERE id = 3 LIMIT 1;
    
  4. आता ids 1 ते 6 सगळे वेगळे आहेत, म्हणून step 1 मधला ALTER TABLE चालेल. आत्ता चालवू नका: पुढच्या section मध्ये आपण id primary key करू आणि AUTO_INCREMENT एकाच command मध्ये जोडू.

  5. Best practice: प्रत्येक table ला primary key द्या. SQL तुम्हाला भाग पाडत नाही; primary key नसलेला table चालतो. पण मग वर पाहिलंत तसं, दोन सारख्या rows कधीच वेगळ्या ओळखता येत नाहीत.
Primary key विरुद्ध unique key Duplicates PRIMARY KEY चालत नाहीत UNIQUE चालत नाहीत NULL PRIMARY KEY कधीच नाही: column NOT NULL होतो UNIQUE चालतो, अनेक rows मध्ये सुद्धा एका table मध्ये किती PRIMARY KEY फक्त एक (अनेक columns मिळून पण) UNIQUE हवे तितके नेहमीचा column PRIMARY KEY id, बहुतेक AUTO_INCREMENT सह UNIQUE email, phone, username DESC दाखवतो PRIMARY KEY PRI UNIQUE UNI Duplicate वर error key चं नाव सांगतो: ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY' ERROR 1062 (23000): Duplicate entry 'amit' for key 'name' Best practice: प्रत्येक table ला primary key द्या. SQL तो सोडूदेतो, पण मग दोन सारख्या rows कोणतीच query वेगळ्या ओळखू शकतनाही.

Figure 6. Primary key विरुद्ध unique key: दोन्ही duplicates नाकारतात; primary key मध्ये NULL कधीच नाही आणि एका table ला एकच; unique key मध्ये NULL चालतो आणि एका table ला अनेक असू शकतात.

12. AUTO_INCREMENT: id MariaDB ला ठरवू द्या

का: लोक हाताने ids टाकतात (1, 5, 500 ...), तेव्हा पुढच्या user ला कोणता id द्यायचा ते कोणालाच कळत नाही, आणि दोघं एकच id निवडू शकतात.

Classroom line

If IDs are typed in randomly, you can't tell what ID to write for a new record.

काय: AUTO_INCREMENT प्रत्येक नवीन row ला पुढचा number आपोआप देतो: आतापर्यंतचा सगळ्यात मोठा id, अधिक 1. त्या column वर key असावा लागतो, सहसा primary key.

कसं:

  1. Key शिवाय MariaDB नाकारतो: ALTER TABLE users MODIFY COLUMN id INT AUTO_INCREMENT; ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key देतो.
  2. दोन्ही एकाच command मध्ये करा:

    ALTER TABLE users MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;
    
  3. DESC users; id int(11), Null NO, Key PRI, Extra auto_increment दाखवतो.

  4. id न देता insert करा:

    INSERT INTO users (name, address) VALUES ('pooja', 'satara');
    
  5. pooja ला id 7 मिळतो: सगळ्यात मोठा id 6 होता.

Classroom line

If you use auto_increment, you needn't write the id; it increases the id by itself.

  1. मोकळा असेल तर तुम्ही अजूनही स्वतः id देऊ शकता. घेतलेला id नाकारला जातो:

    INSERT INTO users (id, name, address) VALUES (1, 'meera', 'kolhapur');
    
  2. हे ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY' देतं.

  3. मोकळा id चालतो: INSERT INTO users (id, name, address) VALUES (10, 'meera', 'kolhapur');
  4. Counter त्याच्या पुढे उडी मारतो. id न देता पुढचा insert, ('arjun', 'pune'), ला 11 मिळतो, 8 नाही. Ids 8 आणि 9 कधीच वापरले जात नाहीत.

13. AUTO_INCREMENT मध्ये gaps का राहतात

का: Interviewers हे पण विचारतात: "मी शेवटची row delete केली; पुढच्या row ला तिचा id परत का मिळाला नाही?"

Classroom line

Once an insert is rejected, that id is used up.

काय: Table एक counter ठेवतो जो फक्त पुढे जातो. एकदा दिलेला id परत कधीच दिला जात नाही, त्याची row delete झाली किंवा insert fail झाला तरी. हे मुद्दाम असं आहे: अनेक sessions एकाच वेळी insert करू शकतात, आणि प्रत्येकाला इतरांची वाट न बघता स्वतःचा number मिळतो. Numbers परत वापरायला मागे गेलं तर ते एकमेकांत आदळतील.

कसं:

  1. arjun ला delete करा: DELETE FROM users WHERE id = 11;
  2. arjun ला परत टाका: INSERT INTO users (name, address) VALUES ('arjun', 'pune');
  3. त्याला 12 मिळतो, 11 नाही.
  4. Fail झालेला insert पण एक number वापरतो. Section 14 मध्ये duplicate नावाचा insert fail होतो; पुढचा यशस्वी insert एक number सोडतो.
  5. म्हणून ids मध्ये gaps नाहीत असं कधीच मानू नका, आणि rows मोजायला ते वापरू नका. त्यासाठी SELECT COUNT(*) FROM users; वापरा.
  6. INT 2,147,483,647 ला थांबतो. त्यापेक्षा मोठा होऊ शकेल अशा table साठी id ला BIGINT वापरा.
AUTO_INCREMENT: फक्त पुढे जाणारा counter INSERT INTO users (name, address) VALUES ('pooja','satara'); -- gets 7 INSERT ... (id, name, address) VALUES (1, 'meera','kolhapur'); -- ERROR 1062 1 2 3 4 5 6 [7] पुढचा id = 8 id दिला नाही: सगळ्यात मोठा + 1. घेतलेला id नाकारला जातो. INSERT ... (id, name, address) VALUES (10, 'meera','kolhapur'); -- you chose 10 INSERT INTO users (name, address) VALUES ('arjun','pune'); -- gets 11 1 2 3 4 5 6 7 · 8 9 · [10] [11] पुढचा id = 12 तुम्ही निवडलेला मोकळा id चालतो; counter त्याच्या पुढेजातो. DELETE FROM users WHERE id = 11; then insert arjunagain -- gets 12 INSERT 'amit' fails on UNIQUE name (uses 13); insert'isha' -- gets 14 1 2 3 4 5 6 7 · 8 9 · 10 ✗11 [12] ✗13 [14] पुढचा id = 15 Delete झालेले आणि fail झालेले ids परत मिळत नाहीत: gapsnormal आहेत. [ ] = added now · ✗ = deleted, or used up by a failed insert · 8 9 = neverused AUTO_INCREMENT ला column वर key लागतो, सहसा primary key(नसेल तर ERROR 1075).

Figure 7. Animation: AUTO_INCREMENT counter 7 देतो (सगळ्यात मोठा + 1) आणि घेतलेला id नाकारतो; निवडलेल्या 10 मुळे counter 11 वर उडी मारतो; 11 delete केल्यावर आणि 13 वापरणाऱ्या fail insert नंतर नवीन rows ना 12 आणि 14 मिळतात.

Ravindra Bagale's Tip

id ला कधीच परत न दिल्या जाणाऱ्या roll number सारखं वागवा: तो फक्त row ओळखतो. Users ना तो count म्हणून दाखवू नका, gaps हाताने भरू नका, आणि दुसरा data त्याला refer करायला लागल्यावर तो बदलू नका. लोकांना दिसणारा number हवा असेल, उदा. order number, तर तो वेगळ्या column मध्ये ठेवा.

14. असलेल्या column ला UNIQUE लावा

का: खऱ्या app मध्ये email किंवा username एकाच व्यक्तीचा असला पाहिजे. इथे आपण name वर practice करतो.

Classroom line

Names usually aren't unique, but right now we just want to try it out.

कसं:

  1. नियम लावा:

    ALTER TABLE users MODIFY COLUMN name VARCHAR(20) UNIQUE;
    
  2. चालतो, कारण कोणत्याच दोन rows चं नाव सारखं नाही. असतं तर, ते ठीक करेपर्यंत ERROR 1062 आला असता.

  3. DESC users; name साठी UNI दाखवतो, id च्या PRI आणि auto_increment शेजारी.
  4. दुसरा amit टाका:

    INSERT INTO users (name, address) VALUES ('amit', 'mumbai');
    
  5. Fail होतो: ERROR 1062 (23000): Duplicate entry 'amit' for key 'name'. Unique key ला त्याच्या column चं नाव मिळतं.

  6. कोणीतरी नवीन टाका: INSERT INTO users (name, address) VALUES ('isha', 'nagpur'); isha ला id 14 मिळतो: fail झालेल्या amit insert ने 13 वापरला.
  7. NULL चालतो, दोनदा सुद्धा: INSERT INTO users (name, address) VALUES (NULL, 'pune'), (NULL, 'nashik'); चालतो.
  8. DELETE FROM users WHERE name IS NULL; ने त्या परत काढा.
  9. अगदी नवीन column साठी, जोडतानाच नियम लिहा: ALTER TABLE users ADD COLUMN email VARCHAR(100) UNIQUE;

Classroom line

What does unique mean? The name must not repeat.

MariaDB terminal: ALTER TABLE users modify column name varchar(20) unique; Query OK, 0 rows affected. desc users; lists id int(11) Null NO Key PRI Extra auto_increment, name varchar(20) Key UNI, address varchar(50), age int(11) Default 18.

Whiteboard: ALTER TABLE users MODIFY COLUMN name VARCHAR(20) UNIQUE; DESC id ला auto_increment सह PRI आणि name ला UNI दाखवतो.

15. DELETE विरुद्ध TRUNCATE विरुद्ध DROP

का: तिघंही काहीतरी "काढतात", आणि त्यांचा फरक हा classic interview प्रश्न आहे. चुकीचा निवडला तर पूर्ण table जाऊ शकतो.

काय:

  1. DELETE तुम्ही WHERE ने निवडलेल्या rows एक-एक करून काढतो; WHERE नसेल तर प्रत्येक row. Table राहतो, आणि AUTO_INCREMENT counter पुढे मोजत राहतो. Safe update mode याला लागू होतो.
  2. TRUNCATE TABLE पूर्ण table एका झटक्यात रिकामा करतो. त्याला WHERE नाही. Structure राहतं, आणि counter परत 1 पासून सुरू होतो. मोठ्या table वर पण fast.
  3. DROP TABLE table च काढतो: structure आणि data. DROP DATABASE database आणि त्यातले सगळे tables काढतो.

Classroom line

With DELETE, rows are deleted one by one; with TRUNCATE, all the data is deleted.

कसं:

  1. निवडलेल्या rows delete करा: DELETE FROM users WHERE id = 4;
  2. प्रत्येक row delete करा: DELETE FROM users; Query OK, 9 rows affected असं उत्तर देतो.
  3. एक row टाका: INSERT INTO users (name) VALUES ('test'); तिला id 17 मिळतो: DELETE ने counter reset केला नाही.
  4. TRUNCATE ने table रिकामा करा:
    TRUNCATE TABLE users;
    

Classroom line

Delete everything inside the table, only the data, but not the table's structure.

  1. तीच row परत टाका. आता तिला id 1 मिळतो: TRUNCATE ने counter reset केला.
  2. DESC users; अजूनही चारही columns त्यांच्या keys सह दाखवतो. फक्त data गेला.
  3. Table काढा: DROP TABLE users;
  4. DESC users; आता ERROR 1146 (42S02): Table 'instagram.users' doesn't exist देतो.
  5. पूर्ण practice database काढा: DROP DATABASE instagram; Prompt MariaDB [(none)]> होतो.
  6. SHOW DATABASES; मध्ये आता instagram नाही.
  7. यापैकी काहीच client मध्ये undo होत नाही. DELETE आधी तोच WHERE SELECT ने चालवा; खऱ्या data वर TRUNCATE किंवा DROP आधी backup ठेवा.
MariaDB terminal: drop table users; Query OK. desc users; ERROR 1146 (42S02): Table 'instagram.users' doesn't exist. drop database instagram; Query OK, 1 row affected. The prompt becomes MariaDB [(none)]. show databases; lists amazon, information_schema, insta, mysql, performance_schema, wordpressdb.

Whiteboard: DROP TABLE users, मग DESC users ERROR 1146 ने fail; DROP DATABASE instagram, आणि SHOW DATABASES मध्ये तो आता नाही.

DELETE, TRUNCATE आणि DROP:किती गायब होतं DELETE DELETE FROM users WHERE id = 4; तुम्ही निवडलेल्या rows काढतो (WHERE नसेल तर प्रत्येक row). Table राहतो. id counter पुढे मोजत राहतो. Safe update mode लागू. TRUNCATE TRUNCATE TABLE users; Table एका झटक्यात रिकामा करतो. WHERE नाही: नेहमी सगळ्या rows. Structure राहतं. id counter परत 1 पासून. मोठ्या table वर पण fast. DROP DROP TABLE users; Table च काढून टाकतो, structure आणि data एकत्र. मग DESC users; ERROR 1146 देतो. DROP DATABASE instagram; आतले सगळे tables काढतो. यापैकी कशालाच इथे undo नाही. आधीSELECT ने तपासा, आणि खऱ्या data चाbackup ठेवा.

Figure 8. DELETE निवडलेल्या rows काढतो आणि table व id counter ठेवतो; TRUNCATE table रिकामा करतो आणि counter 1 पासून सुरू करतो; DROP table, किंवा पूर्ण database, काढतो.

Practice झाल्यावर exit; type करा आणि EC2 instance stop करा.

16. पूर्ण class एका page वर

  1. UPDATE data बदलतो; ALTER TABLE structure बदलतो.
  2. SELECT @@SQL_SAFE_UPDATES; SET SQL_SAFE_UPDATES = 1; WHERE मध्ये key column किंवा LIMIT नसलेले UPDATE / DELETE अडवतो (ERROR 1175), या session पुरतं.
  3. ALTER TABLE t ADD COLUMN c type; नवीन column, जुन्या rows मध्ये NULL.
  4. ALTER TABLE t MODIFY COLUMN c newtype; लहानाकडून मोठ्याकडे सुरक्षित; मोठ्याकडून लहानाकडे प्रत्येक value बसली तरच (ERROR 1265, ERROR 1264).
  5. Phone numbers VARCHAR; INT 2,147,483,647 ला थांबतो, आणि int(11) फक्त display width.
  6. NOT NULL value compulsory करतो (ERROR 1364); आधी असलेले NULL ठीक करा.
  7. DEFAULT x नवीन rows मध्ये सोडलेला column भरतो.
  8. नियम काढायला column तो नियम सोडून MODIFY करा.
  9. DROP COLUMN c, RENAME COLUMN a TO b, RENAME TO newname.
  10. Primary key: duplicates नाही, NULL नाही, एका table ला एक. Unique: duplicates नाही, NULL चालतो, एका table ला अनेक.
  11. INT PRIMARY KEY AUTO_INCREMENT: सगळ्यात मोठा + 1; घेतलेला id ERROR 1062 देतो; delete आणि fail inserts नंतर gaps normal.
  12. DELETE निवडलेल्या rows (counter पुढे चालू); TRUNCATE सगळ्या rows (counter परत सुरू); DROP table किंवा database.

17. Hands-on lab: table ची रचना सुरक्षितपणे बदला

हा lab का. Apps बदलतात, म्हणून tables बदलतात. हा lab छोट्या, फेकून देता येणाऱ्या table वर columns जोडतो आणि बदलतो, rules आणि keys जोडतो, आणि येणारा प्रत्येक error दाखवतो.

  1. छोटा table बनवा
    • Command: CREATE TABLE staff (id INT, name VARCHAR(20), city VARCHAR(20)); INSERT INTO staff VALUES (1,'ravi','pune'),(2,'neha','mumbai'),(3,'amit','nashik');
    • काय दिसेल: Query OK, 0 rows affected, मग Query OK, 3 rows affected.
    • Check करा: SELECT * FROM staff; → 3 rows.
    • का: Structure वर प्रयोग करताना वेगळा table तुमचा खरा practice data सुरक्षित ठेवतो.
  2. Column जोडा
    • Command: ALTER TABLE staff ADD COLUMN phone VARCHAR(15);
    • काय दिसेल: Query OK, 0 rows affected आणि Records: 0 Duplicates: 0 Warnings: 0.
    • Check करा: SELECT * FROM staff; मध्ये तिन्ही rows साठी phone NULL.
    • का: ALTER TABLE data नाही, structure बदलतो, म्हणून कोणतीही row "affected" नाही. INT नाही VARCHAR, कारण phone numbers 0 किंवा + ने सुरू होऊ शकतात.
  3. name compulsory करा
    • Command: ALTER TABLE staff MODIFY COLUMN name VARCHAR(30) NOT NULL;
    • काय दिसेल: Query OK आणि Duplicates: 0 Warnings: 0.
    • Check करा: INSERT INTO staff (id, city) VALUES (4, 'goa'); → ERROR 1364 (HY000): Field 'name' doesn't have a default value
    • का: App तपासायला विसरलं तरी आता database स्वतः नावाशिवायची row नाकारतो. MODIFY पूर्ण column परत लिहितो, म्हणून type परत लिहायचा.
  4. Primary key जोडा
    • Command: ALTER TABLE staff ADD PRIMARY KEY (id);
    • काय दिसेल: Query OK आणि Duplicates: 0 Warnings: 0.
    • Check करा: INSERT INTO staff (id, name) VALUES (1, 'raj'); → ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
    • का: Primary key प्रत्येक row एका unique, non-NULL value ने शोधता येईल असं करतो. तो नसेल तर दोन सारख्या rows वेगळ्या ओळखता येत नाहीत.
  5. ids MariaDB ला निवडू द्या
    • Command: ALTER TABLE staff MODIFY COLUMN id INT AUTO_INCREMENT; INSERT INTO staff (name, city) VALUES ('raj', 'goa');
    • काय दिसेल: दोनदा Query OK.
    • Check करा: SELECT id, name FROM staff WHERE name = 'raj'; → 4 | raj
    • का: शेवटचा id कोणालाही लक्षात ठेवावा लागत नाही; MariaDB पुढचा number वापरतो. Key column वरचा MODIFY key ठेवतो, म्हणून primary key राहतो.
  6. Safe updates चालू करा
    • Command: SET SQL_SAFE_UPDATES = 1; UPDATE staff SET city = 'pune';
    • काय दिसेल: ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
    • Check करा: एकही row बदलली नाही: SELECT city FROM staff; अजूनही चार वेगवेगळी शहरं दाखवतो.
    • का: Safe mode म्हणजे seat belt: WHERE मध्ये key नसलेले UPDATE आणि DELETE तो अडवतो. तो फक्त या session पुरता.
  7. Key ने एक row update करा
    • Command: UPDATE staff SET city = 'solapur' WHERE id = 4;
    • काय दिसेल: Query OK, 1 row affected
    • Check करा: SELECT city FROM staff WHERE id = 4; → solapur
    • का: WHERE मधला primary key नेमकी एकच row बदलेल याची खात्री देतो, म्हणून safe mode परवानगी देतो.
  8. Delete नंतरचं gap बघा
    • Command: DELETE FROM staff WHERE id = 4; INSERT INTO staff (name, city) VALUES ('sara', 'goa');
    • काय दिसेल: दोनदा Query OK, 1 row affected.
    • Check करा: SELECT id, name FROM staff; ids 1, 2, 3, 5 दाखवतो.
    • का: AUTO_INCREMENT कधीच number परत वापरत नाही, म्हणून delete झालेला id gap राहतो. परत वापरला तर जुने आणि नवीन records मिसळू शकतात.
  9. रिकामा करा, मग काढा
    • Command: TRUNCATE TABLE staff; DROP TABLE staff;
    • काय दिसेल: दोनदा Query OK, 0 rows affected.
    • Check करा: DESC staff; → ERROR 1146 (42S02): Table 'instagram.staff' doesn't exist (तुमच्या database चं नाव वेगळं असू शकतं).
    • का: TRUNCATE table रिकामा करतो आणि counter reset करतो; DROP table च काढून टाकतो. दोघांनाही undo नाही, म्हणून ते practice tables साठीच ठेवा.

18. Try at home

Try at home

Task 1: safe updates

  1. @@SQL_SAFE_UPDATES तपासा, मग on करा.
  2. WHERE शिवाय UPDATE करून बघा आणि error वाचा.
  3. LIMIT लावून तो चालवा. मग logout करा, परत login करा आणि setting परत तपासा.

Task 2: table बदला

  1. id INT, name VARCHAR(20) आणि price INT असलेला products table बनवा, आणि तीन rows टाका.
  2. code column जोडा, मग तो INT वरून VARCHAR(10) करा.
  3. name ला NOT NULL DEFAULT 'no name' करा, आणि नाव नसलेली row टाका.
  4. Default ठेवून NOT NULL काढा. प्रत्येक step DESC ने तपासा.
  5. price चं नाव mrp करा, मग table चं नाव items करा.

Task 3: keys

  1. id ला PRIMARY KEY AUTO_INCREMENT करा. Fail झालं, तर आधी duplicate शोधून ठीक करा.
  2. id न देता दोन rows टाका आणि त्यांचे ids लिहून ठेवा.
  3. शेवटची row delete करा, परत insert करा, आणि नवीन id का आला ते सांगा.
  4. UNIQUE email column जोडा आणि तोच email दोनदा टाका. मग NULL दोनदा टाका.

Task 4: data काढा

  1. सगळ्या rows DELETE करा, एक टाका, आणि तिचा id लिहा.
  2. Table TRUNCATE करा, एक टाका, आणि id ची तुलना करा.
  3. Table DROP करा आणि DESC ने खात्री करा.

Recap

थोडक्यात

  1. UPDATE rows मधल्या values बदलतो; ALTER TABLE columns, types, नावं आणि नियम बदलतो.
  2. Safe update mode (SQL_SAFE_UPDATES = 1) WHERE मध्ये key column किंवा LIMIT नसलेले UPDATE आणि DELETE ERROR 1175 ने नाकारतो; तो तुमच्या session पुरता असतो.
  3. ADD COLUMN असलेल्या rows मध्ये NULL सह column जोडतो; MODIFY COLUMN त्याचा type किंवा size बदलतो आणि प्रत्येक value बसली तरच चालतो.
  4. Phone numbers VARCHAR मध्ये ठेवा: INT 2,147,483,647 ला थांबतो आणि पुढचा + किंवा 0 घालवतो.
  5. NOT NULL value compulsory करतो (ERROR 1364); DEFAULT सोडलेली value भरतो; नियम काढायला column तो नियम सोडून परत लिहा.
  6. DROP COLUMN column आणि त्याचा data काढतो; RENAME COLUMN आणि RENAME TO फक्त नावं बदलतात.
  7. Primary key मध्ये duplicates नाही आणि NULL नाही, एका table ला एक; unique key मध्ये duplicates नाही पण NULL चालतो, एका table ला अनेक. प्रत्येक table ला primary key द्या.
  8. AUTO_INCREMENT ला key लागतो आणि तो सगळ्यात मोठा + 1 देतो; counter फक्त पुढे जातो, म्हणून gaps normal.
  9. DELETE निवडलेल्या rows काढतो आणि counter ठेवतो; TRUNCATE table रिकामा करतो आणि counter परत सुरू करतो; DROP table किंवा database काढतो.

सराव Tasks

या scenario बद्दल

Sangli Turmeric Traders हा सांगली मधला मसाले व्यापार व्यवसाय आहे. Dattatray Chavan त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे INR मध्ये मोजले जातात आणि AWS resources ap-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 10

सोपं मोठ्या orders आधी

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: Order id व amount, मोठी amount आधी.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

सोपं City नुसार customers

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: Pune मधल्या customers ची नावं.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

सोपं MariaDB मध्ये login करा

का: mysql client ने database server वर SQL चालवता येतं.

काय करायचं: MariaDB client root user म्हणून उघडा व password विचारू द्या.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम एकूण sales

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: सगळ्या order amounts ची बेरीज.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

मध्यम Customer नावांसह orders

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: प्रत्येक customer नाव व order amount.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

मध्यम लहान orders काढा

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: 200 पेक्षा कमी amount चे orders delete.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

मध्यम City दुरुस्त करा

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: Customer 5 Rome ला गेले. Record update करा.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

अवघड Customer नुसार sales

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: Customer नुसार total, फक्त 1000 पेक्षा जास्त.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

अवघड Orders नसलेले customers

का: RDS setup नंतर database query करणं रोजचं काम.

काय करायचं: कधीच order न केलेल्या customers ची नावं.

Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

अवघड Database चा file मध्ये backup घ्या

का: mysqldump पूर्ण database SQL म्हणून लिहितो. मोठ्या बदलांआधी save करा.

काय करायचं: sanglihaldi_wp database root user ने (password विचारून) sanglihaldi_wp.sql मध्ये dump करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

झटपट उजळणी cards

हा lesson दोन मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR त्याचा lesson उघडतो.

तुलना card: Primary key vs Unique key. Primary key: प्रत्येक row ची मुख्य ID. Unique key: Column मध्ये duplicate नको हा नियम.
तुलना: Primary key vs Unique key · PNG download करा
तुलना card: DELETE vs TRUNCATE vs DROP. DELETE: निवडलेल्या rows काढतो. TRUNCATE: एकदम सगळ्या rows काढतो. DROP: पूर्ण table काढतो.
तुलना: DELETE vs TRUNCATE vs DROP · PNG download करा
तुलना card: UPDATE vs ALTER TABLE. UPDATE: Rows मधला data बदलतो. ALTER TABLE: Table ची रचना बदलतो.
तुलना: UPDATE vs ALTER TABLE · PNG download करा
उजळणी card: ALTER TABLE ने table बदला. Apps वाढतात: data न गमावता नवीन किंवा मोठा column हवा. ALTER TABLE structure बदलतो: ADD, MODIFY, DROP, RENAME COLUMN, RENAME TO. Table name, action आणि column definition लिहा. Phone add:
उजळणी card: ALTER TABLE ने table बदला · PNG download करा
उजळणी card: Safe update mode. WHERE शिवाय UPDATE एकदम प्रत्येक row बदलतो. Safe mode WHERE मध्ये key नसलेले UPDATE आणि DELETE block करतो (ERROR 1175). SELECT @@SQL_SAFE_UPDATES ने तपासा; 1 ने चालू. चालू:
उजळणी card: Safe update mode · PNG download करा
उजळणी card: NOT NULL आणि DEFAULT. रिकामे required fields, उदा. email नसणं, नंतर app तोडतात. NOT NULL रिकाम्या values ना मनाई (ERROR 1364). DEFAULT value नसेल तर भरतो. CREATE मध्ये किंवा MODIFY COLUMN ने set करा. Column:
उजळणी card: NOT NULL आणि DEFAULT · PNG download करा
उजळणी card: AUTO_INCREMENT ids. प्रत्येक row ला unique id हवा, हाताने टाकल्यास duplicates होतात. AUTO_INCREMENT पुढचा number आपोआप देतो. Failed inserts gaps सोडतात. Primary key वर वापरा; INSERT मध्ये id सोडा. Definition:
उजळणी card: AUTO_INCREMENT ids · PNG download करा
मुलाखत card: Phone number INT नाही, VARCHAR म्हणून का?. INT पुढचे zeros आणि + काढतो, आणि त्याची max साधारण 2.1 billion. Phone numbers वर गणित करत नाही. +91 09876543210 VARCHAR(15) मध्ये बसतो.
मुलाखत card: Phone number INT नाही, VARCHAR म्हणून का? · PNG download करा
मुलाखत card: AUTO_INCREMENT ids मध्ये gaps का?. Failed inserts आणि deletes numbers वापरतात, ते परत वापरले जात नाहीत. Ids unique हवेत, सलग नाही. Insert 3 ERROR 1062 ने fail; पुढच्या row ला 4.
मुलाखत card: AUTO_INCREMENT ids मध्ये gaps का? · PNG download करा
मुलाखत card: ERROR 1175 म्हणजे काय, कसा handle करता?. Safe update mode ने WHERE मध्ये key नसलेला UPDATE/DELETE block केला. चुकून प्रत्येक row बदलण्यापासून वाचवतो. Key condition add करा:
मुलाखत card: ERROR 1175 म्हणजे काय, कसा handle करता? · PNG download करा

अजून cards: Ravi Sir's Cards.